假设我有这个数据:
df<-data.frame("Row_id"=c(1,2,3,4,5,6,7,8),"A"=c(1,0,1,0,1,0,0,1),"B"=c(0,1,1,0,0,0,0,1),"C"=c(1,0,0,0,0,0,0,1),"D"=c(0,0,0,0,0,0,0,1),"E"=c(0,0,0,0,0,0,0,1),"F"=c(0,0,0,0,0,0,0,1))
正如您所看到的,在大多数行中,值都相同。但是假设我想创建一个新变量(或两个真的)来告诉我:因此,例如在上面的数据中,我会得到如下所示的新列:
标记为 tidyverse 因为我想我更喜欢那个,但灵活。
最佳答案
我们可以使用 rowSums
在除第一列之外的列上通过与第二列进行比较来创建逻辑向量。如果行明智总和为“n1”,则通过加 1 将其转换为数字索引,并使用它来将值更改为“否”、"is"。然后,我们通过遍历行来创建“不同”列,paste
names
不为 0 的元素(在这里,我们也可以使用基于“相同”列的 ifelse
n1 <- ncol(df[-1])
df$Same <- c("No", "Yes")[(rowSums(df[-1] == df[,2]) == n1) + 1]
df$Different <- apply(df[2:7], 1, function(x)
if(!all(x == 1)) toString(names(x)[x !=0 ]) else "")
关于R Tidyverse 判断哪一列值不一样,返回两个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64433901/