【问题标题】:How to export data frame with vector entries into CSV file?如何将带有矢量条目的数据框导出到 CSV 文件中?
【发布时间】:2018-06-14 19:10:25
【问题描述】:

我有一个数据框,其中包含一些条目作为列表。这是从 JSON 文件导入的,其中一个条目可能有多个标签。它使用jsonlite 包和flatten=TRUE 导入JSON 文件。我的标签列中的示例条目是:

list(tag = c("ethicaltheory", "gametheory"), raw_tag = c("ethical heory", "Game Theory"))

我过滤了表格并希望将其导出为 csv。当我尝试write.csv 命令时,当它使用list 命中第一个条目时,我遇到了错误:

“'EncodeElement'中未实现的类型'list'”

问题是我可以按原样导出这个文件吗,我是不是在导入时出错了?

我可以将条目转换为字符串或其他内容,但我不确定如何为整个表格执行此操作。

【问题讨论】:

  • 您希望输出文件究竟是什么样的? CSV 文件希望每一列都是一个值,每一行都有相同的列数。有多少列有多个值?寻求帮助时,您应该包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出。
  • 我可以接受标签列,每个条目实际上只是 "list(tag = c("ethicaltheory", "gametheory"), raw_tag = c("ethical theory", "Game Theory"))" 等。我将在我的条目中附加一个示例。
  • 好的。但是您将有一段时间将其读回 R 中,因为这肯定不是“正常”的 CSV 文件。你确定你真的需要 CSV 吗?如果你以 R 更容易读取的二进制格式存储它呢?
  • 我想要一些可以与不了解 R 的人分享的东西。实际上,我无法创建示例,因为 R 不会让我从头开始执行 read_json 命令所做的事情。
  • 我想我想出了一个修复 assets_refined

标签: r dataframe export-to-csv jsonlite


【解决方案1】:

有趣的问题。我不知道data.frame 可以存储list。该算法采用可变长度list 存储在data.frame 的一行中。然后它找到最大长度,创建具有适当尺寸的matrix,然后保存文件。

x <- list(tag = letters[1:2], raw_tag = letters[1:3])
y <- list(tag = letters[1:2], raw_tag = letters[1:2])
z <- list(tag = letters[1:3], raw_tag = letters[1:4])
df <- data.frame(clmn = I(list(x, y, z)))

r <- apply(df, 1, unlist)
lm <- max(unlist(lapply(r, length)))

df <- data.frame(
  matrix(
    rep(0, (lm * nrow(df))),
    ncol = lm
    )
  )
)

vals.v <- unlist(lapply(1:nrow(df), function(i) {
  v <- unlist(r[i])
  l <- length(v)
  c(v, rep(0, lm - l))
}))
fin.res <- t(matrix(vals.v, ncol = nrow(df)))

# write.csv(fin.res, "res2.csv") # uncomment to save CSV file

【讨论】:

  • 我也没有。我玩过它,但很难从头开始复制。不知何故,json阅读器知道如何。
  • 就扩展该子列表而言,这似乎可以解决问题
猜你喜欢
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多