首页 > 解决方案 > 如何轻松地对数据框中的特定数据进行子集化?

问题描述

我有以下数据框:

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 分或更高的分数。

标签: rsubset

解决方案


这对你有用吗?

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

推荐阅读