如何在数据框中轻松地选取特定数据子集?

4

I have the following dataframe:

Data <- structure(list(ID = c(101, 102, 103, 104, 105, 106
), V1 = c(1, 3, 3, 1, 1, 1), V2 = c(1, 1, 
1, 1, 1, 1), V3 = c(3, 1, 1, 1, 1, 1), V4 = c(1, 
1, 1, 1, 1, 1)), row.names = c(NA, 6L), class = "data.frame")


我想要对具有变量V1、V2、V3或V4的值为3或更高的条目进行子集划分。它们可以在一个或多个变量上具有3或更高的分数,但至少需要一个。
我目前使用的方法如下:
set <- grep('V', names(Data))
Data <- Data[rowSums(Data[set] > 2) > 0, set]

我几乎得到了所需的内容,但是缺少列ID。

我想我可以创建一个名为keep的值来保存这些ID,稍后再将它们添加到数据框中,所以我尝试了一下。

keep <- Data$ID

如果使用c()函数并命名新的列,替换的行将无法匹配,因此会出现错误。因此我尝试了以下方法:

keep <- as.data.frame(keep)
Data <- merge(Data, keep, by=c('ID')

当然,这会导致错误,因为我忘记了Data没有现有的ID列可以与之合并。
所以现在我正在寻找一种方法,在一步中保留ID或将其包含在早期子集得分为3或更高的步骤中。

3
Data <- Data[rowSums(Data[set] > 2) > 0, ] - Ronak Shah
1
或者,如果您仍想要删除其他变量,则可以使用以下代码:Data <- Data[rowSums(Data[set] > 2) > 0, c("ID", set)] - Gregor Thomas
Data[which(Data[set] >= 3, arr.ind = TRUE)[,"row"],] - d.b
2个回答

2
library(dplyr)
Data %>% filter_at(vars(-ID), any_vars(. >= 3))
# OR
Data %>% filter_at(vars(starts_with("V")), any_vars(. >= 3))

2

这对你有用吗?

df_sub <- subset(Data, V1>=3 | V2>=3| V3>=3)

因此,结果将会是:
   ID V1 V2 V3 V4
1 101  1  1  3  1
2 102  3  1  1  1
3 103  3  1  1  1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接