r - 检查每一行的数据框的条件,即逐行
问题描述
df
我有一个带有列的数据框a1,b1,a2,b2,a3,b3
。另一方面,我有一个向量vec
。
我想获取列中元素所在时间的每一df
行。b1,b2,b3
vec
我的意思是,如果在一行中,列的元素b1
和b2
在vec
,但列的元素b3
不在vec
我想得到的2
。如果列中的行的元素都不b1,b2,b3
在其中vec
(如果它们缺少值),我想得到0
.
如果我放rowSums(!df[,c(b1,b2,b3)] %in% vec)
,我会得到错误'x' must be an array of at least two dimensions
,因为里面的条件是一行,而不是 的行数df
。我所做的其他尝试也失败了。
其中之一:只有 1 行的示例:
df[1,c('b1','b2','b3')]: 6 -1 NA
如果我把
df[1,c('b1','b2','b3')]==c(-1,-2)
,
我明白了
FALSE FALSE NA
我想去哪里
FALSE TRUE NA
提前致谢!
解决方案
在%in%
a 上工作vector
,所以我们遍历感兴趣的列并获得元素总和Reduce
Reduce("+", lapply(df[c('b1', 'b2', 'b3')], function(x) !x %in% vec))
如果我们按行进行比较,那么我们可以使用apply
rowSums(t(apply(df[c('b1', 'b2', 'b3')], 1, function(x) !x %in% vec)))
或将其转换为 a matrix
,然后与 进行比较%in%
,更改尺寸并执行rowSums
m1 <- as.matrix(df[c('b1', 'b2', 'b3')])
rowSums(`dim<-`(!m1 %in% vec, dim(m1)))
推荐阅读
- google-app-maker - GSuite Appmaker - 如何使用按钮在表格中设置默认值
- arrays - SAS:在列中的最后一个条目后添加值
- c# - 可以在 PHP 中运行的 C# 程序中运行命令吗?
- python - 如何在字符串中搜索后跟特定单词的任何数字?
- azure - 在 Microsoft Azure 中,Azure AD 设备和 MSOL 设备有什么区别
- python - 如何使用 numpy 从二进制文件中获取字节数据
- c++ - 所有变量是否都根据它们在程序中声明的顺序连续存储?
- reactjs - 如果用户在动画时滚动,则停止 React 弹簧动画
- reactjs - 什么 ReactJS 错误 Minified React 错误 #301 是什么意思?
- c# - 如何创建接受具有文档附件属性的对象的 WebAPI 服务?