簡體   English   中英

如何在R中整理嵌套列表

[英]how to sort out a nested list in R

原始數據是一個簡單的名為“ data”的列表,像這樣

[1] "score: 10 / review 1 / ID 1
[2] "score: 9 / review 2 / ID 2
[3] "score: 8 / review 3 / ID 3
----
[30] "score: 7 / review 30 / ID&DATE: 30

為了分別對分數評論和ID&DATE進行分類,我首先將其制成矩陣,然后使用str_split“ stringr”將其按“ /”分割

因此整個過程是這樣的。

a1 <- readLines("data.txt")
a2 <- t(a1)   # Matrix 
a3 <- t(a2)   # reversing rows and columns
b1 <- str_split(a,"/")

這就是問題b1作為這樣的嵌套列表出現的問題。

[[1]]
[1] "score: 10"
[2] "review 1"
[3] "ID 1"

[[2]]
[1] "score: 9"
[2] "review 2"
[3] "ID 2"

[[3]]
[1] "score: 8"
[2] "review 3"
[3] "ID 3"

------

[[30]]
[1] "score: 7"
[2] "review 30"
[3] "ID 30"

我想提取[[1]] [1],[[2]] [1],[[3]] [1],... [[30]] [1],[[n] ] [2]和[[n]] [3]分別設置,並將它們中的每一個設為一個數據幀。

有什么線索嗎?

以下內容適用於看起來像您的數據的特定類型的嵌套列表。 沒有可復制的示例,我不確定:

# create nested list
temp <- list(a=c(list("score: 10"), "review 1", "ID 1"), 
         b=c("score: 9", "review 2", "ID 2"),
         c=c("score: 8", "review 3","ID 3"))

# create data frame from this list
df <- data.frame(score=unlist(sapply(temp, function(i) i[1])),
                 review=unlist(sapply(temp, function(i) i[2])),
                 ID=unlist(sapply(temp, function(i) i[3])))

我使用sapply從每個列表項中提取元素。 然后,將unlist應用於輸出,使其成為向量。 所有這些輸出都包裝在data.frame中。 請注意,您可以重新排列輸出,以使變量的排列方式不同。

@parfait提到的一種更干凈的方法使用do.callrbind

# construct data.frame, rbinding each list item
df <- data.frame(do.call(rbind, temp))
# add the desired names
names(df) <- c('score', 'review', 'ID')

暫無
暫無

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

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