首页 > 解决方案 > 计算数据框中具有特定值的列

问题描述

我有以下称为 temp 的可重现数据集:

temp=as.data.frame(cbind(c("x3","x2","x1",NA),c("x5","x2","x1",NA),c("x2","x3","x1",NA),c("x3","x2","x1","x4"),c("x1","x2",NA,NA)))

我想计算列c("x3","x2","x1")及其所有可能变量(例如c("x1","x2","x3"))在 temp 中的次数。因此它应该给出输出[2]sum(sapply(temp, function(x) all(x[!is.na(x)] %in% c("x1","x2","x3"))))不幸的是没有给出正确的解决方案。一个人怎么能计算出具有特定值的列的数量以及它的所有变体?

标签: rcount

解决方案


你的代表:

temp <- as.data.frame(
  cbind(
    c("x3", "x2", "x1",  NA ),
    c("x5", "x2", "x1",  NA ),
    c("x2", "x3", "x1",  NA ),
    c("x3", "x2", "x1", "x4"),
    c("x1", "x2",  NA ,  NA )
  )
)
target <- c("x3", "x2", "x1")

然后,如果您想检查该列是否仅包含这 3 个级别:

sum(sapply(temp, function(x) setequal(target, levels(x))))

setequal()无论顺序如何,检查两组是否相等。levels(因为你没有设置stringsAsFactors = FALSE告诉你列中的所有内容。

这将做同样的事情:

sum(sapply(temp, function(x) setequal(target, na.omit(x))))

如果您想检查每个元素出现的次数是否相同,请尝试identical(),以及as.character()将向量转回字符。

sum(sapply(temp, function(x) {
  identical(sort(target), sort(as.character(na.omit(x))))
}))

(或者只是stringsAsFactors = FALSE在您的原始数据集中设置,您不必在as.character()这里使用。)


推荐阅读