提问人:xiaochuan fang 提问时间:8/7/2022 更新时间:8/7/2022 访问量:67
R 检查一列与其他列的 rowSums 的相等性
R check equality of one column to rowSums of other columns
问:
我有一个这样的数据帧:
x | y | 1倍 | 一年级 | 2倍 | 二年级 | x3的 | 三年级 |
---|---|---|---|---|---|---|---|
1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 3 | 0 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 | 0 | 2 | 0 |
1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
我想找到 x=x1+x2+x3 的行和 y=y1+y2+y3 的行。 这是我检查 x=x1+x2+x3 的代码:
col_x = c(3,5,7)
df[df$x == rowSums(df[col_x])]
假设返回行 1,3,4,但它返回
x x1 y1 x2 x3 y3
1 1 1 0 0 0 0
2 0 3 0 0 0 0
3 2 0 0 0 2 0
4 1 0 0 1 0 0
我也试过了
col_x = c(3,5,7)
df[df$x == apply(df[col_x],1,sum)]
这也给了我:
x x1 y1 x2 x3 y3
1 1 1 0 0 0 0
2 0 3 0 0 0 0
3 2 0 0 0 2 0
4 1 0 0 1 0 0
我无法弄清楚为什么它返回了所有行并且它跳过了 y2 列。
答:
1赞
PaulS
8/7/2022
#1
可能的解决方案:
library(dplyr)
df %>%
filter(x == rowSums(across(matches("x\\d$"))) &
y == rowSums(across(matches("y\\d$"))))
#> x y x1 y1 x2 y2 x3 y3
#> 1 1 0 1 0 0 0 0 0
#> 2 2 0 0 0 0 0 2 0
#> 3 1 0 0 0 1 0 0 0
评论
1赞
xiaochuan fang
8/7/2022
这也是一个很好的解决方法!
1赞
stomper
8/7/2022
#2
你只是缺少一个逗号。
col_x = c(3,5,7)
df[df$x == rowSums(df[col_x]),]
x y x1 y1 x2 y2 x3 y3
1 1 0 1 0 0 0 0 0
3 2 0 0 0 0 0 2 0
4 1 0 0 0 1 0 0 0
评论
0赞
xiaochuan fang
8/7/2022
我简直不敢相信这是正确的答案!
评论