簡體   English   中英

Unnest()R不適用於大數據樣本

[英]Unnest() R does not work for large data sample

我正在從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)`

整齊的回購數據,未列出的語言和代碼行

`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`

具有語言的數據框

unnest()的文檔中

unnest()可以處理可以是原子向量,列表或數據幀的列表列(但不能混合使用不同類型的列)。

您的列表中有兩種不同的原子類型。 我不知道這是否是您的數據結構,沒有注釋中要求的可復制示例,但這說明了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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM