小小的背景故事,我还是R的新手,最近才学会以长格式格式化数据。但即使是现在,我也不确定我是否一直都在正确地做这件事。
我已将数据导入数据集列表
# after import, data looks something like this
a <- data.frame(x = 1:50, y = rnorm(50), z = "A")
b <- data.frame(x = 1:40, y = rnorm(40), z = "B")
c <- data.frame(x = 1:20, y = rnorm(20), z = "C")
set <- list(a,b,c)
如您所见,nrow()对于每个数据帧都不相同。
现在我需要对数据进行计算,例如最大y处的x是什么,或y达到某个值需要多长时间,或者计算y在0以上的时间等等。
我之前已经使用宽格式的数据完成了这项工作,其中每个变量都有自己的列,我可以使用apply轻松地在所有列上执行我的函数,然后将结果抛出到另一行。< / p>
此时,我所获得的最远的是重新格式化数据并使用ggplot绘制图表
require(ggplot2)
t <- as.data.frame(do.call(rbind.fill, set))
ggplot(t, aes(x = x, y = y, color = z)) + geom_line()
我的直觉是,以长格式启动数据并且我应该使用reshape
中的某些东西从长到宽的数据帧来执行我的计算是件好事。
到目前为止,由于行数不同,我几乎没有任何进展。
总之,我的问题是如何将上面在t
中编译的数据转换为我可以对整个变量列表执行某些计算的格式,稍后将结果投放到图形和报告等等
由于
答案 0 :(得分:0)
这花了太长时间才找到答案,所以我将来在这里为我和其他人发布。
总结一下,长格式对于使用ggplot绘图很有用,宽对于apply
数据帧的函数很有用。不幸的是,我导入的数据行长度不均匀,导致转换为数据帧很麻烦。
要解决这个问题,而不是使用rbind.fill导入,我基本上需要一个不存在的cbind.fill。直到我发现它发布在这里: