【问题标题】:extract from list and save to csv从列表中提取并保存到 csv
【发布时间】:2015-07-29 21:10:51
【问题描述】:

我正在努力做一些我知道应该很简单的事情。

我有一个这样的数据框列表:

a <- rep(1, 10)
b <- rep(3.6, 10)
foo1 <- cbind(a, b)

d <- rep(2, 8)
b <- rep(4.9, 8)
foo2 <- cbind(d, b)

data <- list(foo1, foo2)

我想通过索引或列名从每个数据帧中提取第二列,并使用 write.table 并与数据帧同名保存到 csv 文件。我尝试了很多东西——for循环和lapplysapply

我收到各种错误消息,但主要是以下内容:

In if (file == "") file <- stdout() else if (is.character(file)) { : the condition has length > 1 and only the first element will be used

我无法解决。

我知道我没有正确索引。请帮帮我!

【问题讨论】:

  • lapply(data, function(x) x[,2,drop=FALSE])
  • 您尝试的导致此类错误的代码是什么?
  • 那些不是数据框。
  • 确认。对不起,不是 df 的假数据。真正的数据对象是数据帧!
  • @akrun 这将提取列。但是,我如何将 lapply 的结果输入到单个 csv 中?我尝试了一个 for 循环并为此再次 lapply,但无法正确建立索引。

标签: r list


【解决方案1】:

您可以使用循环遍历data 的字段:

for (i in 1:length(data)) {
    col <- data[[i]][,2]
    fname <- paste("foo", i, ".csv", sep="")
    write.table(col,fname)
}

write.table 命令可能需要进行一些调整,直到您获得所需格式的数据。

【讨论】:

  • 谢谢!我也试过这种方法,除了你在第二行代码中索引“数据”的方式之外,一切都是正确的。我一直试图只在变体中使用 [i] 而不引用“数据”。现在我有两个干净的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多