我有一组数据帧,所有数据帧都具有相同的列。我想为每个数据帧自动为特定列绘制不同的行。类似的东西:
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轴中绘制字节,考虑每个连接的不同时间。
我希望我现在能更好地澄清这个问题。
答案 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()
答案 1 :(得分:0)
这非常有趣。我想我们可以像这样概括for循环:
lapply(X = c(dfarray), FUN = function(x) {lines(x = x$a, y = x$b, ylim=c(5,12))}