如何在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数据表?