根据现有数据帧有条件地将其合并为一个数据帧

问题描述

我有仅根据特定条件存在的数据帧,因此有时并非每一个可能的数据帧都存在。它基于数据集的一列中有多少个唯一值。我想拥有可以随时间更新的通用代码,以便随着时间的推移存在更多唯一值,我可以将它们添加到集团数据框中。以下代码创建包含唯一值的对象。

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)

解决方法

由于没有显示示例数据集或通过“合并”或“合并”告诉我们的含义,因此很难确切知道您的需求。

但是考虑到您所说的话,一种方法可能是将数据帧分配给单个列表(如果数据帧存在),而在数据帧不存在时不执行任何操作。然后,您可以使用Reducemerge或您喜欢的机制合并列表中的所有数据集。

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