我遇到了以下数据争论问题。每个数据集的aValue每个值都有多个值aName。这可以很容易地在一个整洁的数据框中表示。
someDatasets <- list(dataset1 = data.frame(aName = c("a", "a", "a", "b", "b"), aValue = 1:5, dataset = "ds1"),
dataset2 = data.frame(aName = c("a", "a", "a", "b", "c", "c"), aValue = (1:6)*10 , dataset = "ds2"),
dataset3 = data.frame(aName = c("a", "c", "c", "c"), aValue = (1:4)*100, dataset = "ds3"))
tidyData <- Reduce(dplyr::bind_rows, someDatasets)
我想将数据集变量“传播”到各个列中。tidyr::spread(由于重复的键,我无法用来创建所需的输出。)
###
# Desired output
###
# aName ds1 ds2 ds3
# a 1 10 100
# a 2 20 NA
# a 3 30 NA
# b 4 40 NA
# b 5 NA NA
# c NA 50 200
# c NA 60 300
# c NA NA 400
有没有一种整洁的方法来生成所需的输出?
ps:我知道spread-key-value-pairs-when-keys-are-in-different-columns问题,但解决方案
dcast(melt(someDatasets, id = "aName", na.rm = TRUE), aName~value)
由于使用了聚合函数,因此不会产生所需的输出length。