r - 计算数据框中具有特定值的列
问题描述
我有以下称为 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"))))
不幸的是没有给出正确的解决方案。一个人怎么能计算出具有特定值的列的数量以及它的所有变体?
解决方案
你的代表:
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()
这里使用。)
推荐阅读
- encryption - 在 oracle 中加密和解密有困难
- android - 如何将 TextEdit 字段的输入保存到字符串中?
- assembly - 在 linux 中组装这段代码会给我语法错误
- php - php代码中的选择标签与下一个重叠
- python - 根据单元格值中的列表检索数据框行
- javascript - 如何从数组中获取具有确切 ID 的表中的产品?
- java - 对空结果集的非法操作。使用 LAST_INSERT_ID()
- node.js - 客户端在 Express + Passport 中自动注销后,如何发送一次“您的会话已过期”
- java - 将 recycleview settext 的值作为意图发送
- python - ImportError:libGL.so.1:无法打开共享对象文件:没有这样的文件或目录