簡體   English   中英

標題:對列表列的操作

[英]Tibble: operation on list columns

我有以下問題:

temp <- structure(list(x = list(1:10, 1:10), y = list(c(3L, 9L, 10L, 
8L, 1L), c(1L, 3L, 5L, 2L, 4L))), .Names = c("x", "y"), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -2L))


> temp
# A tibble: 2 x 2
           x         y
      <list>    <list>
1 <int [10]> <int [5]>
2 <int [10]> <int [5]>

我想創建一個新列z ,它是xy列中列表元素的setdiff,這樣temp$z應該輸出為:

> temp$z
[[1]]
[1] 2 4 5 6 7

[[2]]
[1]  6  7  8  9 10

和溫度將更新為:

> temp
# A tibble: 2 x 3
           x         y         z
      <list>    <list>    <list>
1 <int [10]> <int [5]> <int [5]>
2 <int [10]> <int [5]> <int [5]>

PS:dplyr解決方案會很棒! :-)

您可以在mutate使用Map

temp %>% mutate(z=Map(setdiff, x, y))
# # A tibble: 2 x 3
#            x         y         z
#       <list>    <list>    <list>
# 1 <int [10]> <int [5]> <int [5]>
# 2 <int [10]> <int [5]> <int [5]>

temp %>% mutate(z=Map(setdiff, x, y)) %>% pull(z)
# [[1]]
# [1] 2 4 5 6 7
# 
# [[2]]
# [1]  6  7  8  9 10

您可以在mutate中使用purrr::map2


library(dplyr)
library(purrr)

temp %>% mutate(z = map2(x, y, setdiff))

#> # A tibble: 2 x 3
#>            x         y         z
#>       <list>    <list>    <list>
#> 1 <int [10]> <int [5]> <int [5]>
#> 2 <int [10]> <int [5]> <int [5]>

或只是在我們處於基地時就:)

within(temp,z<-Map(setdiff, x, y))

暫無
暫無

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

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