当前位置: 首页 > 知识库问答 >
问题:

使用dplyr测试多个列中的值是否相同

艾令雪
2023-03-14

我在数据帧中有一些列是字符变量。下面给出了我感兴趣的列的两行示例:

a <- rep('Agree', 20)
b <- rep(c('Disagree', 'Agree'), 10)
dat <- data.frame(rbind(a,b), stringsAsFactors = FALSE)

我想确定所有列具有相同值的行。例如,使用dplyr mutate,我想创建一个名为“allSame”的新变量,其中“dat”第一行的值为“yes”,第二行的值是“no”。

我还想按数字而不是名称对列进行索引,因为某些变量具有很长的名称,并且数据帧中有多个列集,我想为此执行此操作。

共有2个答案

汪坚
2023-03-14

如果要独立迭代每一行,请使用sapply。它可能值得查找泛函

a <- rep('Agree', 20)
b <- rep(c('Disagree', 'Agree'), 10)
df <- data.frame(a, b, stringsAsFactors =F)


df <- mutate(df, same = sapply(1:nrow(df), function(i){
  if(a[i] == b[i]){'yes'} else {'no'}
}))

重命名应使用名称

names(df) <- paste0('index_', 1:length(names(df))
萧元徽
2023-03-14

以下是检查您是否有相同答案(即全部同意或全部不同意)的一种方法。我创建了一个最小的样本,并做了以下工作。您希望检查每一行是否只有“同意”或“不同意”。您可以使用逻辑检查。< code>mydf == "Agree"返回一个包含T或f的矩阵。使用< code>rowSums(),您可以计算T在每行中出现的次数。如果结果等于ncol(mydf),在本例中是3,那么您只有“同意”。如果你有0,你只有“不同意”。我猜你希望这些案子是肯定的。< code>allSame中的TRUE表示是。

mydf <- data.frame(col1 = c("Agree", "Agree", "Disagree"),
                   col2 = c("Agree", "Disagree", "Disagree"),
                   col3 = c("Agree", "Disagree", "Disagree"),
                   stringsAsFactors = FALSE)

#      col1     col2     col3
#1    Agree    Agree    Agree
#2    Agree Disagree Disagree
#3 Disagree Disagree Disagree

mydf %>%
mutate(allSame = (rowSums(mydf == "Agree") == 0 |
                  rowSums(mydf == "Agree") == ncol(mydf)))

#      col1     col2     col3 allSame
#1    Agree    Agree    Agree    TRUE
#2    Agree Disagree Disagree   FALSE
#3 Disagree Disagree Disagree    TRUE

鉴于上述情况,您会这样做:

dat %>%
mutate(allSame = (rowSums(dat == "Agree") == 0 |
                  rowSums(dat == "Agree") == ncol(dat)))
 类似资料:
  • 我试图创建一个函数,将多个变量与一个整数进行比较,并输出一个由三个字母组成的字符串。我想知道是否有办法将其翻译成Python。那么说: 它将返回以下列表: 这样的事情可能吗?

  • 当相应的列>0时,我需要将一些数据列设置为NA。 我也在考虑重塑,这样我就可以做一个变异。这里最好的做法是什么?

  • 我试图计算许多列的行平均值。有人能解释一下为什么下面的代码只计算代码中两个变量(var_1和var_13)的平均值,而不是所有13列的平均值吗?

  • 问题内容: 有什么原因为什么不能使用其hashCode方法测试Java字符串的相等性?所以基本上,而不是… 你可以用… 这将很有用,因为一旦字符串计算出其哈希码,则比较字符串将与比较int一样有效,因为该字符串将缓存哈希码,并且如果您将字符串设计为方式。 问题答案: 因为:如果两个对象相等,则两个对象的hashCode必须相等,但是,如果两个对象不相等,则hashCode仍可以相等。 (评论后修改

  • 在这个问题中,我必须有一个带有键和字符串值的映射,以查看多个键是否映射到同一个值。换句话说,我的方法应该返回true,如果没有两个键映射到相同的值,则返回false。我尝试将所有地图放在一个集合中,检查每个元素,看看是否有两个相同值的副本;然而,这似乎对我不起作用。如有任何建议,将不胜感激,谢谢。 提示: 编写一个方法isUnique,该方法接受从字符串到字符串的映射作为参数,如果没有两个键映射到

  • 问题内容: 我正在斯坦福大学在iTunes U上的演讲(仍然很绿色)上从事Breakout任务,但遇到了咆哮。我正在尝试为不同的彩色积木设置点值,以便我可以计算分数,但是我的if似乎不起作用。我有一种感觉,getColor()没有返回我认为是的值;我创建了一个状态标签来显示其返回的内容,但是我仍然不知道如何进行测试。这很可能是我遗失或只是不知道的简单事情。 这是我正在工作的一小段代码: 如果您需要