R Tidyverse 判断哪一列值不一样,返回两个值

标签 r tidyverse

假设我有这个数据:

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))
正如您所看到的,在大多数行中,值都相同。但是假设我想创建一个新变量(或两个真的)来告诉我:
  • 对于变量 A 到 F
  • ,该行中的所有内容是否相同?
  • 如果不相同,哪些是“1”

  • 因此,例如在上面的数据中,我会得到如下所示的新列:
    enter image description here
    标记为 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/

    相关文章:

    从 ggsurvplot 中的图例中删除变量名称

    根据规则删除多列和多行中的重复项

    R : How to extract the factor levels as numeric from a column and assign it to a new column using tydyverse?

    r - 如何根据 R 中列中的值组合排除行?

    r - magrittr 三通管 %T>% 等效

    r - 如何在没有按钮参数的 Rvest 包中提交登录表单

    r - 固化融化的数据框?

    r - 使用 ggplot2 对数正态刻度进行漂亮的刻度(动态而非手动)

    r - 有没有办法从 JSON 列中有效地提取多个属性?

    r - 如何使用 geom_bar 并在 x 轴上使用两个分类变量