基于向量对data.frame中的列进行分类

时间:2019-01-07 14:33:14

标签: r dataframe vector classification

在以下data.frame df中,我想创建一个新列,该列的值将从A列的分类中得出。如果{if {1}}列中的数字对应于A向量中的数字之一,则在名为G1的新列中,应将其分类为“ G1”。同样,如果Group列中的值对应于A向量中的值之一,则应将其分类为“ G2”。其余列应归为“ G0”。

G2

3 个答案:

答案 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% G1df$A %in% G2都不为真,我们选择“ G0”(由于开头是1 + ...)。由于G1G2不重叠,因此仅在df$A %in% G1时才选择“ G1”。同样,索引为3,仅当df$A %in% G2时才选择“ G2”。