我有这个df:
>df
author author_id other_authors other_authors_id
A 123 D, E ,F 011 , 021, 003
B 122 G 111
C 121 H, F 101, 003
最后两列的值存储为list
。我想把它做的很长,但是我不确定什么是最好的方法。我正在尝试从中创建网络图。
我想收集它们,使它们看起来像这样:
author other_autors author_id other_autors_id
A D 123 011
A E 123 021
A F 123 003
B G 122 111
C H 121 101
C F 121 003
有什么想法怎么做?
我已经做到了,但是只有在值不是lists
时它才有效。
gather(df, key="author", value="other_authors", -author)
答案 0 :(得分:0)
我们可以将cSplit
中的splitstackshape
用于多个列拆分
library(splitstackshape)
cSplit(df, c("other_authors", "other_authors_id"), ", ", "long",
fixed = FALSE, type.convert = FALSE)
# author author_id other_authors other_authors_id
#1: A 123 D 011
#2: A 123 E 021
#3: A 123 F 003
#4: B 122 G 111
#5: C 121 H 101
#6: C 121 F 003
或使用separate_rows
中的tidyr
library(tidyverse)
df %>%
separate_rows(other_authors, other_authors_id)
# author author_id other_authors other_authors_id
#1 A 123 D 011
#2 A 123 E 021
#3 A 123 F 003
#4 B 122 G 111
#5 C 121 H 101
#6 C 121 F 003
如果列“ other_authors”,“ others_authors_id”是list
列,那么我们可以使用unnest
df1 %>%
unnest
# author author_id other_authors other_authors_id
#1 A 123 D 011
#2 A 123 E 021
#3 A 123 F 003
#4 B 122 G 111
#5 C 121 H 101
#6 C 121 F 003
df <- structure(list(author = c("A", "B", "C"), author_id = 123:121,
other_authors = c("D, E ,F", "G", "H, F"), other_authors_id = c("011 , 021, 003",
"111", "101, 003")), class = "data.frame", row.names = c(NA,
-3L))
df1 <- structure(list(author = c("A", "B", "C"), author_id = 123:121,
other_authors = list(c("D", "E", "F"), "G", c("H", "F")),
other_authors_id = list(c("011", "021", "003"), "111", c("101",
"003"))), row.names = c(NA, -3L), class = "data.frame")
答案 1 :(得分:0)
请下次提供可复制的示例。
<button class="GBTG6V-f-a GBTG6V-f-l GBTG6V-f-p GBTG6V-f-g" [...]>