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