【问题标题】:R plotting list of dataframesR绘制数据框列表
【发布时间】:2018-08-01 08:14:02
【问题描述】:

我有一个数据框数组,都具有相同的列。我想为每个数据框的特定列自动绘制不同的线。比如:

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

这样的可能吗,还是我必须循环每个数据帧并为每个数据帧添加一个 line()?

编辑

对不起,实际上我创建的是一个列表。 基本上我有两张表,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 轴为字节,考虑到每个连接的不同时间序列。

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

【问题讨论】:

  • 寻求帮助时,您应该包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出。你真的有一个data.frames数组吗?或data.frames列表?这些在 R 中是不同的。通常在绘图之前将数据合并到单个 data.frame 是有意义的。
  • 据我所知,R 中没有 data.frames 数组之类的东西。也许你的意思是 data.frames 列表?在这种情况下,您可以使用 lapply()。
  • @Aleh:你对 R 的了解太有限了。数据框是列表,列表可以是矩阵或数组的可索引元素。
  • @42 可能是,请在代码中提供一个示例。否则,您可以将 data.frames 存储在列表中并运行 lapply() 来填充绘图。
  • @Aleh 对不起,我刚刚编辑添加了更多详细信息

标签: arrays r list dataframe plot


【解决方案1】:

这是绘制从 3 维数组中提取的多个数据帧的可重现示例。注意需要使用“[[”来处理索引,并且plot 的默认图形类型是点而不是线。可以用 type="l" 改变它:

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()

【讨论】:

  • 谢谢,我不知道我可以在情节中使用关系 y~x。这解决了我的问题。
  • 有多个plot(和lines)“方法”。它们被称为“通用函数”。 ?plot.formula 中描述了这种用法
【解决方案2】:

这很有趣。我认为我们可以这样概括 for 循环:

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

【讨论】:

    猜你喜欢
    • 2021-12-27
    • 2018-11-06
    • 1970-01-01
    • 2020-03-22
    • 2018-04-08
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多