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_))

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...