变异和 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_))
所以我在编写基本语法时又遇到了一些麻烦。
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_))