【发布时间】:2020-09-28 14:17:05
【问题描述】:
好的,我必须重新编码一个 df,因为我希望因子是整数:
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 被切换到遗忘状态。使用 unlist() 返回一个对于 df 来说太短的向量。
length(unlist(sapply(df$sex, switch, "male" = 1, "female" = 2, NA)))
应该是20207,但是是20206。
我想要的是通过将 NA 作为 NA 返回来匹配 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]