变异和 case_when:错误的数字和 NA

mutate and case_when: wrong numbers and NA

所以我在编写基本语法时又遇到了一些麻烦。

w <- factor(c("m", "w", "w", "m", "m", "w", "w", "w", "m", "m"))
x <- c(28, 18, 25, 29, 21, 19, 27, 26, 31, 22)
y <- c(80, 55, 74, 101, 84, 74, 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, x, y, 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_))