R 中的取消嵌套列表列
Unnesting list columns in R
有没有办法在 R 中取消嵌套列表列以删除层次结构并保留向量中的各个组件?我尝试了 tidyr 的 unnest 函数,但出现错误
library(dplyr)
library(tidyr)
mydf <- tibble(
a1 = c(20, 21, 23, 45),
a2 = list(c("Male", "Female"), c("Yes", "No"),
c("Secondary", "Primary", "Tertiary"),
c("13-14", "15-16", "17 - 18"))
)
#---- Desired output
mydf1 <- tibble(
a1 = c(20, 21, 23, 45),
a2 = c("Male, Female", "Yes, No",
"Secondary, Primary, Tertiary",
"13-14, 15-16, 17 - 18"))
#--- Trial
mydf %>%
mutate(a3 = unnest(a2))
我更喜欢 sapply
和 toString
:
mydf$a3 <- sapply(mydf$a2, toString)
现在:
> mydf
# A tibble: 4 x 3
a1 a2 a3
<dbl> <list> <chr>
1 20 <chr [2]> Male, Female
2 21 <chr [2]> Yes, No
3 23 <chr [3]> Secondary, Primary, Tertiary
4 45 <chr [3]> 13-14, 15-16, 17 - 18
>
toString
将元素连接成一个字符串,并用,
(逗号space)分隔它们。
这会起作用:
mydf %>%
unnest_wider(a2) %>% # not inside mutate and also '_wider' to get separate columns
unite(col = "a2", -a1, sep = ", ", na.rm = TRUE) #and now unite those separate cols
使用map
library(dplyr)
library(purrr)
mydf %>%
mutate(a2 = map_chr(a2, toString))
# A tibble: 4 × 2
a1 a2
<dbl> <chr>
1 20 Male, Female
2 21 Yes, No
3 23 Secondary, Primary, Tertiary
4 45 13-14, 15-16, 17 - 18
有没有办法在 R 中取消嵌套列表列以删除层次结构并保留向量中的各个组件?我尝试了 tidyr 的 unnest 函数,但出现错误
library(dplyr)
library(tidyr)
mydf <- tibble(
a1 = c(20, 21, 23, 45),
a2 = list(c("Male", "Female"), c("Yes", "No"),
c("Secondary", "Primary", "Tertiary"),
c("13-14", "15-16", "17 - 18"))
)
#---- Desired output
mydf1 <- tibble(
a1 = c(20, 21, 23, 45),
a2 = c("Male, Female", "Yes, No",
"Secondary, Primary, Tertiary",
"13-14, 15-16, 17 - 18"))
#--- Trial
mydf %>%
mutate(a3 = unnest(a2))
我更喜欢 sapply
和 toString
:
mydf$a3 <- sapply(mydf$a2, toString)
现在:
> mydf
# A tibble: 4 x 3
a1 a2 a3
<dbl> <list> <chr>
1 20 <chr [2]> Male, Female
2 21 <chr [2]> Yes, No
3 23 <chr [3]> Secondary, Primary, Tertiary
4 45 <chr [3]> 13-14, 15-16, 17 - 18
>
toString
将元素连接成一个字符串,并用,
(逗号space)分隔它们。
这会起作用:
mydf %>%
unnest_wider(a2) %>% # not inside mutate and also '_wider' to get separate columns
unite(col = "a2", -a1, sep = ", ", na.rm = TRUE) #and now unite those separate cols
使用map
library(dplyr)
library(purrr)
mydf %>%
mutate(a2 = map_chr(a2, toString))
# A tibble: 4 × 2
a1 a2
<dbl> <chr>
1 20 Male, Female
2 21 Yes, No
3 23 Secondary, Primary, Tertiary
4 45 13-14, 15-16, 17 - 18