如何在R中排除不同条件下的列?

如何在R中排除不同条件下的列?,r,conditional-statements,R,Conditional Statements,以下是我的例子: 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

以下是我的例子:

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
    COR2   DR3   VAR1 VAR2 P

    0,3    0,23  10    12  2
    0,4    0,45  12    13  1
       DR3   VAR1 VAR2 P

       0,23  10    12  1
       0,45  12    13  0
结果必须如下所示:

                   VAR1  VAR2 P

                    10    12  3
                    12    13  2
                   VAR1  VAR2 P

                    10    12  2
                    12    13  1
                   VAR1  VAR2 P

                    10    12  1
                    12    13  0
如果我的桌子是:

TR1    COR2   DR3   VAR1 VAR2 P

0,1    0,3    0,23  10    12  3
0,2    0,4    0,45  12    13  2
    COR2   DR3   VAR1 VAR2 P

    0,3    0,23  10    12  2
    0,4    0,45  12    13  1
       DR3   VAR1 VAR2 P

       0,23  10    12  1
       0,45  12    13  0
结果必须如下所示:

                   VAR1  VAR2 P

                    10    12  3
                    12    13  2
                   VAR1  VAR2 P

                    10    12  2
                    12    13  1
                   VAR1  VAR2 P

                    10    12  1
                    12    13  0
如果我的桌子是:

TR1    COR2   DR3   VAR1 VAR2 P

0,1    0,3    0,23  10    12  3
0,2    0,4    0,45  12    13  2
    COR2   DR3   VAR1 VAR2 P

    0,3    0,23  10    12  2
    0,4    0,45  12    13  1
       DR3   VAR1 VAR2 P

       0,23  10    12  1
       0,45  12    13  0
结果必须如下所示:

                   VAR1  VAR2 P

                    10    12  3
                    12    13  2
                   VAR1  VAR2 P

                    10    12  2
                    12    13  1
                   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
f1 0][1])]
}
f1(df1,“P”)
#VAR1 VAR2 P
#1   10   12 2
#2   12   13 1

我认为您需要检查
df1[-seq_len(df1$P[df1$P>0][1])]
谢谢,但这会删除行而不是列。我建议您使用内置数据集
mtcars[-(1:3)]检查data.frame索引
谢谢,但这会删除行而不是列。@selectxx7如果它是data.frame,则默认情况下不使用
,它将索引识别为列索引。但是,如果它是一个矩阵,您可能需要一个
。您可以检查
mtcars[-(1:3)]
这是一个数据表。@selectxx7 Ohh,在这种情况下,您需要
as.data.table(mtcars)[,(1:3),with=FALSE]
再次抱歉,但是如何申请名为df1的u数据表?