r - 如何在R中排除不同条件下的列?
问题描述
这是我的例子:
TR1 COR2 DR3 VAR1 VAR2 P
0,1 0,3 0,23 10 12 3
0,2 0,4 0,45 12 13 0
这是我的疑问,最好的方法是确定如果找到 p = 3 的某个值,则必须消除前 3 列,如果没有 P = 3 但如果找到 P = 2 则消除 2第一列,但没有 P = 3 也没有 P = 2,但如果你发现 P = 1 删除第一列
如果我的表是:
TR1 COR2 DR3 VAR1 VAR2 P
0,1 0,3 0,23 10 12 3
0,2 0,4 0,45 12 13 2
结果必须如下所示:
VAR1 VAR2 P
10 12 3
12 13 2
如果我的表是:
COR2 DR3 VAR1 VAR2 P
0,3 0,23 10 12 2
0,4 0,45 12 13 1
结果必须如下所示:
VAR1 VAR2 P
10 12 2
12 13 1
如果我的表是:
DR3 VAR1 VAR2 P
0,23 10 12 1
0,45 12 13 0
结果必须如下所示:
VAR1 VAR2 P
10 12 1
12 13 0
解决方案
一个选项是获取“P”中的第一个非零数字并使用它来删除列
df1[-seq_len(df1$P[df1$P > 0][1])]
# VAR1 VAR2 P
#1 10 12 2
#2 12 13 1
它可以包装成一个函数
f1 <- function(dat, colNm) {
dat[-seq_len(dat[[colNm]][dat[[colNm]] >0][1])]
}
f1(df1, "P")
# VAR1 VAR2 P
#1 10 12 2
#2 12 13 1