R 如何子集数据帧中具有特定值的所有行

R 如何子集数据帧中具有特定值的所有行,r,dataframe,subset,R,Dataframe,Subset,我有一个大型数据集,每行包含“NA”、“1”和“2”的不同组合。我想对所有只包含“2”和“NA”的行进行子集划分 因此,在下面的示例中,我想自动命名并子集第1行和第4行: df <- data.frame(Col1=c(NA,NA,2,NA), Col2=c(NA,NA,1,2), Col3=c(NA,1,NA,NA), Col4=c(2,NA,NA,NA),

我有一个大型数据集,每行包含“NA”、“1”和“2”的不同组合。我想对所有只包含“2”和“NA”的行进行子集划分

因此,在下面的示例中,我想自动命名并子集第1行和第4行:

df <- data.frame(Col1=c(NA,NA,2,NA),
                 Col2=c(NA,NA,1,2),
                 Col3=c(NA,1,NA,NA),
                 Col4=c(2,NA,NA,NA),
                 row.names=c("Row1","Row2","Row3","Row4"),
                 stringsAsFactors = FALSE)
df试试这个:

target <- 2

#print row names
names(which(apply(df, 1, function(x) all(na.omit(x)==target))==TRUE))
[1] "Row1" "Row4"

#subset rows
df_sub <- df[apply(df, 1, function(x) all(na.omit(x)==target)),]

print(df_sub)
     Col1 Col2 Col3 Col4
Row1   NA   NA   NA    2
Row4   NA    2   NA   NA

target谢谢,但这不起作用,因为“2”可以在任何列中,而不仅仅是在“x”列中。在问题被示例数据增强后,它不应该被关闭,IMHO。我正要发布
df[!rowSums(df!=2,na.rm=TRUE),]
以及
行名称(df[!rowSums(df!=2,na.rm=TRUE),]))
作为回答…谢谢,我想添加一个示例,但我不知道如何编辑我自己的问题(…)我的数据框有行名称,因此我也想获得所选行的行名称。再次感谢。好的,我已经相应地更新了我的答案,并为您编辑了您的问题。如果您只想删除包含1的行,您可以执行
df[!apply(df,1,'%in%',x=1),]
df <- data.frame(Col1=c(NA,NA,2,NA),
                 Col2=c(NA,NA,1,2),
                 Col3=c(NA,1,NA,NA),
                 Col4=c(2,NA,NA,NA),
                 row.names=c("Row1","Row2","Row3","Row4"),
                 stringsAsFactors = FALSE)