@makbuk

R как в цикле сделать subset по нескольким полям?

У меня есть данные
field1 field2    field3    field4 field5 field6 field7 field8
   text  text1 segment_1 31-Jan-13    2.7   0.21   1.44   1.29
   text  text1 segment_1 01-May-13    0.7   2.90   0.76   0.38
   text  text1 segment_1 31-Jul-13   -2.3  -0.95  -1.73  -1.95


Первые три поля являются составным ключем, мне нужно на основании уникального составного ключа последовательно сделать подмножество (subset) данных.
Если это делать в цикле по одному полю все работает

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


Как можно решить подобную задачу?
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
@makbuk Автор вопроса
Нашел решение, если кто знает лучше вариант сообщайте.
InputDataSubset<-by(InputData, InputData[, colnames(InputData)[1:3]], FUN=function(df) df)

for (j in 1:length(InputDataSubset)) {
    print(InputDataSubset[j])
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы