比较dataframe组的列是否相等

比较dataframe组的列是否相等,r,dataframe,dplyr,R,Dataframe,Dplyr,我的目标是比较按ID分组的组中的字符串或数字。因此,如果例如var1都是“正常”的,则新列将显示TRUE或FALSE。我知道我可以总结所有内容(),但我需要它成为另一个项目的新专栏。此外,我希望这个比较也适用于数字。在选择栏中,所有选项都必须完全相同。有些团体有两名以上的成员 df <- structure(list(ID = c("A1.1234567", "A1.12345"), var1 = c("NORMAL", "NORMAL"),

我的目标是比较按ID分组的组中的字符串或数字。因此,如果例如var1都是“正常”的,则新列将显示TRUE或FALSE。我知道我可以
总结所有内容()
,但我需要它成为另一个项目的新专栏。此外,我希望这个比较也适用于数字。在选择栏中,所有选项都必须完全相同。有些团体有两名以上的成员

df <- structure(list(ID = c("A1.1234567", "A1.12345"), 
                 var1 = c("NORMAL", "NORMAL"), 
                 var2 = c("NORMAL", "NORMAL"), 
                 var3 = c("NORMAL", "NORMAL"), 
                 var4 = c("NORMAL", "NORMAL"), 
                 var5 = c("NORMAL", "NORMAL"), 
                 var6 = c("NORMAL", "NORMAL"), 
                 var7 = c("25", "25"), 
                 var8 = c("6, 9)),

            .Names = c("ID", "var1", "var2", "var3", "var4", "var5", "var6", "var7", "var8"), 
            class = "data.frame", row.names = c(NA, -2L))

我唯一的想法是对它进行变异,但我似乎无法正确地比较它们

你可以使用
mutate_at
(与
mutate_all
)来避免包含
ID
,因为我们没有按它进行分组,并定义要创建的新变量的名称,以便它不会覆盖现有变量,即

df %>% 
 mutate_at(vars(-ID), funs(new = ifelse(all(. == 'NORMAL'), TRUE, FALSE)))

编辑根据您的评论,有几种方法可以使所有元素都相等。唯一值的长度为1(如果所有值都相同),即


现在您不需要使用
ifelse
,因为我们没有定义一个值您可以使用
mutate\u at
(与
mutate\u all
)来避免包含
ID
,因为我们没有按它进行分组,并定义要创建的新变量的名称,以便它不会覆盖现有变量,即

df %>% 
 mutate_at(vars(-ID), funs(new = ifelse(all(. == 'NORMAL'), TRUE, FALSE)))

编辑根据您的评论,有几种方法可以使所有元素都相等。唯一值的长度为1(如果所有值都相同),即


现在,您不需要使用
ifelse
,因为我们没有定义值

,这对于我的一些列来说非常有效,只要有设置数量的选项。然而,我怎样才能更多地使用它来检查等价性,如果它是数值的,并且范围很大。如果我不清楚,请告诉我我不确定我是否理解。你能在问题中编辑你的例子来包含这样一个例子吗?我把它改成数字和数字character@Randy我编辑了我的答案。请看一看,让我知道这是非常好的作品,我的一些专栏有一定数量的选项。然而,我怎样才能更多地使用它来检查等价性,如果它是数值的,并且范围很大。如果我不清楚,请告诉我我不确定我是否理解。你能在问题中编辑你的例子来包含这样一个例子吗?我把它改成数字和数字character@Randy我编辑了我的答案。请看一看,让我知道
             ID   var1   var2   var3   var4   var5   var6     var7   var8 var1_new var2_new var3_new var4_new var5_new var6_new var7_new var8_new
1 A1.1234567_10 NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL   NORMAL NORMAL     TRUE     TRUE     TRUE     TRUE     TRUE     TRUE    FALSE     TRUE
2 A1.1234567_20 NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL ABNORMAL NORMAL     TRUE     TRUE     TRUE     TRUE     TRUE     TRUE    FALSE     TRUE
mutate_at(df, vars(-ID), funs(new = length(unique(.)) == 1))