如何编写R脚本来检查直线衬里; 即,对于任何给定的行,一组列中的所有值是否具有相同的值

Bof*_*ein 4 logic r dataset data-cleaning

我想创建一个二分变量,告诉我参与者是否对10个问题中的每一个都给出了相同的答案.每一行都是参与者,我想编写一个简单的脚本来在我的数据框中创建这个新的变量/向量.例如,如果我的数据看起来像前6列,那么我正在尝试创建第7列.

ID   Item1  Item2  Item3  Item4  Item5  | AllSame
1    5      5      5      5      5      | Yes
2    1      3      3      3      2      | No
3    2      2      2      2      2      | Yes
4    5      4      5      5      5      | No
5    5      2      3      5      5      | No
Run Code Online (Sandbox Code Playgroud)

我已经在这个集合中看到了将一列与另一列进行比较的解决方案,例如此处ifelse(data$item1==data$item2,1,ifelse(dat$item1==data$item3,0,NA)),但我在实际数据集中有10列,而且我认为必须比检查所有10列相对更好.我也可以创建一个计算多少等于1的变量,然后测试计数是否与列数相同,但是数据中有7个可能的响应再一次看起来非常不合适而且我是希望有人有更好的解决方案.谢谢!

Hen*_*nry 5

有很多方法可以做到这一点,但这里有一个

mydf <- data.frame(Item1 = c(5,1,2,5,5), 
                   Item2 = c(5,3,2,4,2), 
                   Item3 = c(5,3,2,5,3), 
                   Item4 = c(5,3,2,5,5),
                   Item5 = c(5,3,2,5,5) )

mydf$AllSame <- rowMeans(mydf[,1:5] == mydf[,1]) == 1
Run Code Online (Sandbox Code Playgroud)

这导致

> mydf
  Item1 Item2 Item3 Item4 Item5 AllSame
1     5     5     5     5     5    TRUE
2     1     3     3     3     3   FALSE
3     2     2     2     2     2    TRUE
4     5     4     5     5     5   FALSE
5     5     2     3     5     5   FALSE
Run Code Online (Sandbox Code Playgroud)

如果你真的必须有"是"和"否",那么请使用类似的东西

mydf$AllSame <- ifelse(rowMeans(mydf[,1:5] == mydf[,1]) == 1, "Yes", "No")
Run Code Online (Sandbox Code Playgroud)