如何解决mutate 和 case_when:错误的数字和 NA
所以我在编写基本的语法时又遇到了一些麻烦。
w <- factor(c("m","w","m","m"))
x <- c(28,18,25,29,21,19,27,26,31,22)
y <- c(80,55,74,101,84,65,56,88,78)
z <- c(170,174,183,190,185,178,169,163,189,184)
bsp1 <- data.frame(w,x,y,z)
colnames(bsp1) <- c("Geschlecht","Alter","xx","yy")
rm(w,z)
bsp1
我有这个命令,它实际上曾经可以工作。 (对于这个例子,它并不完整,但我想要做的应该很清楚。显然,18:31 命令有问题。
bsp1 <- bsp1 %>%
mutate(xxx =
case_when(
Geschlecht == "m" & Alter > 18 & xx == 55 ~ 1,Geschlecht == "m" & Alter > 18 & xx == 56 ~ 2,Geschlecht == "m" & Alter > 18 & xx == 18:31 ~ 3,TRUE ~ NA_real_))
不管什么原因,它现在给了我一条警告消息(我需要粗略地翻译,因为我的 R Studio 设置为德语,实际上我在任何地方都找不到这个错误消息)。 它仍然创建 xxx 变量,尽管只有一些行被转换,而其他行,即使来自其余行的完整信息被分配了一个“NA”。
警告信息是(大致翻译自德语):
Length of the longer vector is not a multiple of the shorter vector.
如何重写 xx == 18:31 部分,使其有效?
在此先感谢您,并为之前的困惑感到抱歉。
解决方法
试试这个:
bsp1 %>%
mutate(xxx =
case_when(
(Geschlecht == "w") & (Alter > 18) & (xx == 55) ~ "1",(Geschlecht == "m") & (Alter > 18) & (xx == 56) ~ "2",TRUE ~ "NA_real_"))
请注意,没有元素满足条件,因此您将全部拥有NA_real_
如果您想要带有 NA
的列删除所有双引号:
bsp1 %>%
mutate(xxx =
case_when(
(Geschlecht == "w") & (Alter > 18) & (xx == 55) ~ 1,(Geschlecht == "m") & (Alter > 18) & (xx == 56) ~ 2,TRUE ~ NA_real_))