【问题标题】:Unnest() R does not work for large data sampleUnnest() R 不适用于大数据样本
【发布时间】:2018-08-16 04:06:33
【问题描述】:

我正在从 JSON 文件中取消嵌套数据。当我制作一个小样本时, unnest() 函数可以工作,但是当我尝试在大型原始数据帧上运行它时,我收到以下错误。

`Error in bind_rows_(x, .id) : 
  Column lines can't be converted from integer to list`

我的代码如下。我们从 GitHub 的 API 获得 JSON 数据。

`repo_data <- fromJSON("data/data/repos.json")`

小数据帧,只有前 100 行

`repo_small <- head(repo_data, 100)`

整理 repo 数据,不列出语言和代码行

`df_repo <- repo_small %>% select(ownerName, name, languages, ownerType) %>% unnest()`

当我过滤或任何其他奇怪的事情时,没有 NA 行。我需要取消嵌套的唯一列是语言。

语言是一个包含 2 个列表的列表。第一个列表是名称,具有“Java”、“Python”和“Ruby”等值。这些是字符值。第二个列表是行,具有 104、109432 和 10 等值。这些是整数值。

根据要求提供一些示例代码来复制数据。 testdf 将是相关列的数据框和语言。

`owner <- c("github", "palentir", "apple")
gitcode <- data.frame(name = c("java"), lines=c(81))
palentircode <- data.frame(name= c("java", "python", "R"), lines=c(200, 45,903))
applecode <- data.frame(name=c("java", "ruby"), lines=c(12, 120))
langauge <- list(gitcode, palentircode, applecode)
testdf <- data.frame(owner)
testdf$language <- langauge`

dataframe with languages

【问题讨论】:

  • 请提供该数据库的样本(minimal, complete, verifiable example)。一些方法可以找到stackoverflow.com/questions/5963269/…
  • unnest(testdf) 运行时出现警告。你能提供一个重现你的错误的例子吗?
  • 请阅读我们都链接到的帖子:) stackoverflow.com/questions/5963269/…
  • 我试过了,但是数据框的形状不对。警告是相同的错误消息。如果我不绑定任何东西,除非 unnest 是,该消息是什么意思?
  • 感谢您的帮助,但决定看看我是否可以手动编写一个函数,因为似乎 unnest() 正在处理小样本,但在使用大样本时似乎会带来此错误,原始数据集。

标签: r list tidyr unnest


【解决方案1】:

来自unnest()的文档

unnest() 可以处理可以是原子向量、列表或数据帧(但不能混合不同类型)的列表列。

您的列表中有两种不同的原子类型。我不知道这是否是您的数据结构,没有 cmets 中要求的可重现示例,但这说明了unnest() 的要求

DF <- data.frame(a = 1:2)
DF$name <- list(c("Java", "Python", "Ruby"), c(104L, 109432L, 10L))
unnest(DF, name)
# will fail because of the requirements of unnest

如果这是问题所在,您必须先将列表的第二个元素转换为字符。

D$name[[2]] <- as.character(DF$name[[2]])
unnest(DF, name)
#   a   name
# 1 1   Java
# 2 1 Python
# 3 1   Ruby
# 4 2    104
# 5 2 109432
# 6 2     10

【讨论】:

  • 是的,我阅读了文档。但是 unnest 仍然有效,尽管有警告。通过运行示例数据框,我收到了此警告,但它能够成功取消嵌套。 In bind_rows_(x, .id) : binding character and factor vector, coercing into character vector
猜你喜欢
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多