【问题标题】:R loop to subset data by unique composite keyR通过唯一复合键循环到子集数据
【发布时间】:2025-12-21 14:05:06
【问题描述】:

我正在尝试创建一个循环,该循环将使用几个字段(field1、field2、field3)作为键来选择数据

   field1 field2    field3    field4 field5 field6 field7 field8
1    text  text1 segment1 31-Jan-13   2.70   0.21   1.44   1.29
2    text  text1 segment1 01-May-13   0.70   2.90   0.76   0.38
56   text  text3 segment2 01-May-14  -1.50  -1.97  -1.79  -3.51

当我按一栏这样做时,它会起作用:

for (j in 1:length(unique(InputData[,3]))) {

  InputDataSubset <- InputData[InputData[,3] == unique(InputData[,3])[j],]
print(unique(InputData[,3])[j])  
print(InputDataSubset)  
}

如果我尝试通过几列来做到这一点:

for (j in 1:length(unique(InputData[,1:3]))) {

  InputDataSubset <- InputData[InputData[,1:3] == unique(InputData[,1:3])[j,],]
  print(unique(InputData[,3])[j])  
  print(InputDataSubset)  
}

我收到错误消息:

Error in Ops.data.frame(InputData[, 1:3], unique(InputData[, 1:3])[j,  : 
  ‘==’ only defined for equally-sized data frames

如何解决这样的问题?提前致谢。

【问题讨论】:

  • split(DF, DF[, c("field1", "field2")]).
  • 也可以使用dplyr::group_by
  • 或:by(DF, DF[, c("field1", "field2")], FUN=function(df) df)
  • 谢谢大家。谢谢@parfait,这正是我所需要的。

标签: r loops subset


【解决方案1】:

感谢冻糕

工作结果如下:

InputDataSubset<-by(InputData, InputData[, colnames(InputData)[1:3]], FUN=function(df) df)


for (j in 1:length(InputDataSubset)) {
    print(InputDataSubset[j])
}

【讨论】:

  • 很高兴能提供帮助,因为by 是一种未充分利用但有用的切片/骰子方法,而提议的split 是等效的。在by 中,将colnames(InputData)[1:3] 替换为c(1:3)。对于您的for 循环使用:lapply(InputDataSubset, print)
最近更新 更多