R绘制数据帧列表

时间:2018-02-21 16:43:04

标签: arrays r list dataframe plot

我有一组数据帧,所有数据帧都具有相同的列。我想为每个数据帧自动为特定列绘制不同的行。类似的东西:

plot(array[]$time, array[]$data)

是可能的,或者我必须循环每个数据帧并为每个数据帧添加一行()?

修改

请原谅,实际上我创建的是一个列表。 基本上我有两个表connections列出不同的TCP连接信息:

src | src_port | dst | dst_port

probes包含有关数据包和传输数据的时间序列数据:

timestamp | src | src_port | dst | dst_port | packets | bytes

因此,为了绘制所有不同连接的时间序列,我创建了一个数据帧子集列表,如下所示:

connection <- vector(mode='list', length = nrow(connections))
for (row in 1:nrow(connections)){
  connection[[row]] <- subset(probes, src == connections[row, 'src'] & src_port == connections[row, 'src_port'] & dst == connections[row, 'dst'] & dst_port == connections[row, 'dst_port'])
}

我想要获得的是将所有这些子集在x轴上绘制时间戳,在y轴中绘制字节,考虑每个连接的不同时间。

我希望我现在能更好地澄清这个问题。

2 个答案:

答案 0 :(得分:2)

这是绘制从三维数组中提取的多个数据帧的可重现示例。注意需要使用&#34; [[&#34;处理索引,以及plot的默认图形类型是点而不是行。可以使用type =&#34; l&#34;:

更改它
dfarray <- array( list(), c(2,3,4))
dfarray[[1,1,1]] <- data.frame(a=2:4, letters[2:4])  # need to use "[["
dfarray[[1,1,2]] <- data.frame(a=2:4, b=8:10)
dfarray[[1,1,3]] <- data.frame(a=2:4, b=10:12)
# Remember to make enough space to hold lines
 png(); plot(b ~a, data=dfarray[[1,1,1]], ylim=c(5,12) ) 
        for( x in 2:3) {lines( b~a, data=dfarray[[1,1,x]], col=x)}
 dev.off()

enter image description here

答案 1 :(得分:0)

这非常有趣。我想我们可以像这样概括for循环:

lapply(X = c(dfarray), FUN = function(x) {lines(x = x$a, y = x$b,   ylim=c(5,12))}