好的,我需要重新编码一个数据框,因为我希望将因子转换为整数:
library(dplyr)
load(url('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/crash2.rda'))
df <- crash2 %>% select(source, sex)
df$source <- sapply(df$source, switch, "telephone" = 1, "telephone entered manually" = 2, "electronic CRF by email" = 3, "paper CRF enteredd in electronic CRF" = 4, "electronic CRF" = 5, NA)
这个代码的功能是正常的,但是下一个变量(性别)存在NA值,情况变得复杂了:
df$sex <- sapply(df$sex, switch, "male" = 1, "female" = 2, NA)
返回将 NA 转换为 oblivion 的列表。使用 unlist()
返回的向量对 df 来说太短了。
length(unlist(sapply(df$sex, switch, "male" = 1, "female" = 2, NA)))
应该是 20207
,但实际上是 20206
。
我想要的是一个向量,通过将 NAs 返回为 NAs 来匹配 df。
除了一个可行的解决方案外,如果能解释一下我的错误以及代码的实际工作原理,我会非常感激。
编辑:感谢您所有的回答。像通常情况下一样,我应该自己注意到更有效率的解决方案(嗯,我自己发现了它,但显然太晚了):
>str(df$sex)
Factor w/ 2 levels "male","female": 1 2 1 1 2 1 1 1 1 1 ...
所以我只需使用as.numeric()
就可以得到想要的结果。
x = c("a", "e", "a", "a", NA, "d", "b", "b", NA, "d"); lu = c( "a"=1, "b"=2, "c"=3, "d"=4, "e"=5); lu[x]
- user20650