Условное объединение фрейма данных в один фрейм данных на основе его существующего

#r #data-mining

#r #интеллектуальный анализ данных

Вопрос:

У меня есть фреймы данных, которые существуют только в зависимости от определенного условия, поэтому иногда существует не каждый возможный фрейм данных. Это основано на том, сколько уникальных значений имеется в столбце набора данных. Я хотел бы иметь обобщенный код, который может обновляться с течением времени, так как со временем появляется больше уникальных значений, я могу добавлять их в единый фрейм данных. Следующий код создает объект, содержащий уникальные значения.

 x <- month(data$created_at)
  
 y <- unique(month(data$created_at))
  

Вот код, который будет создавать фреймы данных на основе значений y

 if (any(y == 4)) {
april<-data.frame(get_nrc_sentiment(data2[x==4])))
}

if (any(y == 3)) {
march_sentiment<-data.frame(get_nrc_sentiment(data2[x==3])))
}

if (any(y == 2)) {
february_sentiment<-data.frame(get_nrc_sentiment(data2[x==2])))
}
#january
if (any(y == 1)) {
january_sentiment<-data.frame(get_nrc_sentiment(data2[x==1])))
}
  

Если для некоторых данных значения в марте не существуют, но в других они существуют, как мне написать код, чтобы он создавал только большой фрейм данных с существующими настроениями

Для справки, вот что я делаю сейчас

 monthly_sentiment<-data.frame(january_sentiment,february_sentiment,march_sentiment,
                              april_sentiment,may_sentiment,june_sentiment,
                              july_sentiment,august_sentiment)
  

Ответ №1:

Трудно точно знать, что вам нужно, поскольку вы не показали нам пример набора данных или не сказали нам, что именно вы подразумеваете под «слиянием» или «конгломератом».

Но, учитывая то, что вы сказали, одним из подходов могло бы быть назначение фреймов данных одному списку, если фреймы данных существуют, и ничего не делать, когда они не существуют. Затем вы могли бы объединить все наборы данных в вашем списке, используя Reduce и merge , или механизм, который вы предпочитаете.

 datasets <- list()
datasets[['january']] <- data.frame(idx = 1:2, jan = 1:2)
datasets[['february']] <- data.frame(idx = 2:3, feb = 2:3)
datasets[['april']] <- data.frame(idx = 0:1, apr = 0:1)

Reduce(function(x, y) merge(x, y, all=TRUE), datasets)
#>   idx jan feb apr
#> 1   0  NA  NA   0
#> 2   1   1  NA   1
#> 3   2   2   2  NA
#> 4   3  NA   3  NA