在以下data.frame df
中,我想创建一个新列,该列的值将从A
列的分类中得出。如果{if {1}}列中的数字对应于A
向量中的数字之一,则在名为G1
的新列中,应将其分类为“ G1”。同样,如果Group
列中的值对应于A
向量中的值之一,则应将其分类为“ G2”。其余列应归为“ G0”。
G2
答案 0 :(得分:3)
您正在寻找的是
df$group <- ifelse(df$A %in% G1, "G1", ifelse(df$A %in% G2, "G2", "G0"))
用case_when
中的dplyr
可以更好地表示
library(dplyr)
df %>%
mutate(group = case_when(A %in% G1 ~ "G1",
A %in% G2 ~ "G2",
TRUE ~ "G0"))
答案 1 :(得分:1)
问题是您不想测试列中的值等于 A还是B;这些是向量,该测试没有意义。相反,您想知道值是A还是B的元素。将代码调整为
df$group <- ifelse(df$A %in% G1,"G1",ifelse(df$A %in% G2,"G2","G0"))
当我检查它时,它起作用。可能会有一个更优雅的解决方案,但这与您的初次尝试紧密结合。
答案 2 :(得分:1)
这是一个有趣而简洁的选择:
df$group <- c("G0", "G1", "G2")[1 + 1 * df$A %in% G1 + 2 * df$A %in% G2]
我们有三个选项c("G0", "G1", "G2")
的向量。从元素的角度考虑,如果df$A %in% G1
和df$A %in% G2
都不为真,我们选择“ G0”(由于开头是1 + ...
)。由于G1
和G2
不重叠,因此仅在df$A %in% G1
时才选择“ G1”。同样,索引为3,仅当df$A %in% G2
时才选择“ G2”。