【发布时间】:2020-10-20 01:13:30
【问题描述】:
我有以下数据框:
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 保留在一个步骤中,或者将 ID 包含在步骤中,以便在早期获得 3 分或更高的分数。
【问题讨论】:
-
Data <- Data[rowSums(Data[set] > 2) > 0, ] -
或者,如果还有其他变量你还想删除,
Data <- Data[rowSums(Data[set] > 2) > 0, c("ID", set)] -
Data[which(Data[set] >= 3, arr.ind = TRUE)[,"row"],]