[英]Add additional column based on the content of others (in R)
我有一个带有 3 个 qc 的数据框。 我想创建第 4 列,其结果将取决于所有 3 个 qc。 条件:至少 2 个必须为“坏”才能在 qc4 中显示为坏,否则为好。
ID qc1 qc2 qc3
1 AV bad good bad
2 AX bad bad bad
3 AS good good good
4 AW good bad bad
结果
ID qc1 qc2 qc3 q4
1 AV bad good bad bad
2 AX bad bad bad bad
3 AS good good good good
4 AW good bad bad bad
我们可以使用ifelse
rowSums
逻辑向量的值创建“坏”、“好”
nm1 <- grep("^qc\\d+$", names(df), value = TRUE)
df$q4 <- ifelse(rowSums(df[nm1] == "bad") >=2, "bad", "good")
df
# ID qc1 qc2 qc3 q4
#1 AV bad good bad bad
#2 AX bad bad bad bad
#3 AS good good good good
#4 AW good bad bad bad
或者另一种选择是使用rowwise/c_across
从dplyr
library(dplyr)
df %>%
rowwise %>%
mutate(q4 = c("good", "bad")[1+(sum(c_across(starts_with('qc')) ==
'bad') >= 2)]) %>%
ungroup
df <- structure(list(ID = c("AV", "AX", "AS", "AW"), qc1 = c("bad",
"bad", "good", "good"), qc2 = c("good", "bad", "good", "bad"),
qc3 = c("bad", "bad", "good", "bad")), class = "data.frame",
row.names = c("1",
"2", "3", "4"))
另一个使用rowSums
基本 R 选项
df$qc4 <- c("good", "bad")[1 + (rowSums(df == "bad") >= 2)]
这样
> df
ID qc1 qc2 qc3 qc4
1 AV bad good bad bad
2 AX bad bad bad bad
3 AS good good good good
4 AW good bad bad bad
数据
> dput(df)
structure(list(ID = c("AV", "AX", "AS", "AW"), qc1 = c("bad",
"bad", "good", "good"), qc2 = c("good", "bad", "good", "bad"),
qc3 = c("bad", "bad", "good", "bad"), qc4 = c("bad", "bad",
"good", "bad")), row.names = c("1", "2", "3", "4"), class = "data.frame")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.