r - 如何轻松地对数据框中的特定数据进行子集化?
问题描述
我有以下数据框:
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 分或更高的分数。
解决方案
这对你有用吗?
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