根据两个约束子集 data.frame
Subsetting data.frame upon two constraints
假设我想使用 2 个约束进行子集化。
1,第一列中的值相同
2,同时,第二列的值相同
比如我有一个数据框
a <- rep(1:5)
b <- c(1,2,2,2,1,1,1,2,2,2)
data <- data.frame(a,b)
说 a
是配对识别号, b
代表性别
现在我们想要创建一个数据集,其中我们有匹配的 ID 和性别。
是使用 while
命令创建循环还是使用 duplicated
预期结果应该 return 此处以绿色突出显示的数据子集
你可以试试
data[with(data, !!ave(b, a, FUN=function(x)
length(unique(x))==1)),]
或
library(dplyr)
data %>%
group_by(a) %>%
filter(n_distinct(b)==1)
或
library(data.table)
setDT(data)[,.(b=b[length(unique(b))==1]) , a]
或@David Arenburg
提供的另一个data.table
解决方案
setDT(data)[, if (length(unique(b)) == 1) .SD, a]
假设我想使用 2 个约束进行子集化。 1,第一列中的值相同 2,同时,第二列的值相同
比如我有一个数据框
a <- rep(1:5)
b <- c(1,2,2,2,1,1,1,2,2,2)
data <- data.frame(a,b)
说 a
是配对识别号, b
代表性别
现在我们想要创建一个数据集,其中我们有匹配的 ID 和性别。
是使用 while
命令创建循环还是使用 duplicated
预期结果应该 return 此处以绿色突出显示的数据子集
你可以试试
data[with(data, !!ave(b, a, FUN=function(x)
length(unique(x))==1)),]
或
library(dplyr)
data %>%
group_by(a) %>%
filter(n_distinct(b)==1)
或
library(data.table)
setDT(data)[,.(b=b[length(unique(b))==1]) , a]
或@David Arenburg
提供的另一个data.table
解决方案
setDT(data)[, if (length(unique(b)) == 1) .SD, a]