【发布时间】:2021-03-10 05:10:57
【问题描述】:
在数据框中
x1 x2 x3 x4 x5
1 0 1 1 0 3
2 1 2 2 0 3
3 2 2 0 0 2
4 1 3 0 0 2
5 3 3 2 1 4
6 2 0 0 0 1
column x5 表示一行中第一个非零值的位置。该表应从右 (x4) 到左 (x1) 阅读。因此,例如,第一行中的第一个非零值在 x3 列中。
我想获取第一个非零条目为 1 的所有行,即
x1 x2 x3 x4 x5
1 0 1 1 0 3
2 3 3 2 1 4
应该是结果。我尝试了不同版本的 filter_at 但我没有想出一个解决方案。例如。一次尝试是
testdf %>% filter_at(vars(
paste("x",testdf$x5, sep = "")),
any_vars(. == 1))
我想在没有 for 循环的情况下解决这个问题,因为真实的数据集有数百万行和近 100 列。
【问题讨论】:
-
我不明白?在您的 df 第一行中,x2 不为零,那么为什么 x5 说 3?在第 2 行中,x1 不为零,那为什么 x5 也说 3?
-
您必须从右 (x4) 到左 (x1) 读取它。抱歉,我忘了提。