【问题标题】:Subsetting data.frame upon two constraints根据两个约束对 data.frame 进行子集
【发布时间】:2015-01-22 09:12:21
【问题描述】:

假设我想使用 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 创建循环

预期结果应返回此处以绿色突出显示的数据子集

【问题讨论】:

  • 这是一个很好的问题,具有可重复的示例和所需的输出,但您的解释技巧需要提高。
  • 道歉。你会如何改写?
  • “当b 每个a 只有一个唯一值时,我试图只提取行”?大概就是这样。

标签: r subset


【解决方案1】:

你可以试试

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]

【讨论】:

  • @DavidArenburg,谢谢,它是否比子集更快(出于好奇)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
相关资源
最近更新 更多