使用dplyr的filter函数筛选行和大于4的行报错求助
问题解决:dplyr筛选行和大于4的行
错误原因
你的代码报错是因为rowSums(.)中的.在any_vars上下文里指代单个列(比如x或y),是一维向量,但rowSums要求输入至少是二维数组;同时你的逻辑也不符合需求——你要的是x和y的行和大于4,而非单个列的行和(单个列的行和无意义)。
正确解法
方法1:直接计算行和(最直观)
手动计算x+y的和,直接筛选:
df %>% filter(x + y > 4)
方法2:使用现代dplyr的across(推荐)
dplyr 1.0.0及以上版本推荐用across替代旧的filter_at,写法更清晰:
df %>% filter(rowSums(across(c(x, y))) > 4)
方法3:兼容旧版的filter_at写法
如果一定要用filter_at,需要把选中的列作为整体处理,而非逐个列判断:
df %>% filter_at(vars(x, y), ~ rowSums(cur_data()) > 4)
输出结果
以上方法执行后都会得到期望的输出:
x y z 1 3 3 A 2 4 4 B
内容的提问来源于stack exchange,提问作者HappyPy
相关产品推荐
相关产品推荐

