【问题标题】:How to subset all rows in a dataframe that have a particular value如何对数据框中具有特定值的所有行进行子集化
【发布时间】:2017-09-04 18:03:08
【问题描述】:

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

所以在下面的示例中,我想自动命名 Row1 和 Row4 并将其作为子集:

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)

【问题讨论】:

  • 谢谢,但这不起作用,因为“2”可以在任何列中,而不仅仅是在“x”列中。
  • 在示例数据增强了问题之后,恕我直言,它不应该被关闭。
  • 我正要发布df[!rowSums(df != 2, na.rm = TRUE), ]row.names(df[!rowSums(df != 2, na.rm = TRUE), ]) 作为答案...

标签: r dataframe subset


【解决方案1】:

试试这个:

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

样本数据:

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)

【讨论】:

  • 谢谢,差不多,我想添加一个例子,但我不知道如何编辑我自己的问题(...)我的数据框有行名,所以我想获取行名选定的行也是如此。再次感谢。
  • 好的,我已经相应地更新了我的答案,并为你编辑了你的问题。
  • 如果你只想删除包含 1 的行,你可以这样做 df[!apply(df,1,'%in%',x=1 ),]
猜你喜欢
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
相关资源
最近更新 更多