如何在R中使用列表改变data.frame中一个变量的值(映射特性)



我有一个像这样的设置data.frame

c1 <- c(1:5)
c2 <- c('A','B','C','D','E')
d <- data.frame(c1,c2)
d
d[,2] = as.character(d[,2])
typeof(d[,2])
mapping <- list(
  'A'='Apple',
  'B'='Blue Berry'
)
d[,2] <- as.character(mapping[d[,2]])
d

从我的data.frame中,我只想替换'A','B',并保留'C','D'等,但结果显示'C','D'等为NULL。我也尝试了不同的方法来得到我想要的结果。然而,我想知道为什么列表是这样的。有什么办法我可以使用列表有我想要的结果吗?谢谢。我的结果应该是:

  c1         c2
   1      Apple
   2 Blue Berry
   3       'C'
   4       'D'
   5       'E'

注意:映射future using list来自于我课上的一个教科书示例。

编辑:为什么结果将不匹配的列表元素替换为NULL?

mapping[d[,2]]将映射列表细分为d[,2]。换句话说,它要求映射所有与d[,2]中的任意字母匹配的元素。你没有C D E作为映射中的元素,所以它会为这些值返回null。对此有许多可能的解决方案;这里有一个:

ifelse(as.character(mapping[d[,2]]) == "NULL", d[,2], as.character(mapping[d[,2]])) 

最新更新