长格式计算,行长不均匀

时间:2017-03-21 13:17:26

标签: r

小小的背景故事,我还是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中编译的数据转换为我可以对整个变量列表执行某些计算的格式,稍后将结果投放到图形和报告等等

由于

1 个答案:

答案 0 :(得分:0)

这花了太长时间才找到答案,所以我将来在这里为我和其他人发布。

总结一下,长格式对于使用ggplot绘图很有用,宽对于apply数据帧的函数很有用。不幸的是,我导入的数据行长度不均匀,导致转换为数据帧很麻烦。

要解决这个问题,而不是使用rbind.fill导入,我基本上需要一个不存在的cbind.fill。直到我发现它发布在这里:

cbind a df with an empty df (cbind.fill?)