将列中的值添加或附加到数据框中另一列的列表中

时间:2018-03-23 03:42:19

标签: r append tidyverse purrr

这是一个示例数据框

library(tidyverse)
library(purrr)
df <- data_frame(abc = letters[1:3], 
                 lst = list(1:3, 1:3, 1:3), 
                 new_data=1:3)

将给出结果输出

# A tibble: 3 x 3
    abc       lst new_data
  <chr>    <list>    <int>
1     a <int [3]>        1
2     b <int [3]>        2
3     c <int [3]>        3

我想将new_data列中的数字附加到lst list-column中的相应列表。

这是我到目前为止所取得的成就:

df %>%
  mutate(lst= map(lst, ~ append(.,new_data)))

,结果是

# A tibble: 3 x 3
    abc       lst new_data
  <chr>    <list>    <int>
1     a <int [6]>        1
2     b <int [6]>        2
3     c <int [6]>        3

我希望第一个列表包含1,2,3,1,第二个列表包含1,2,3,2,但它们都是1,2,3,1,2,3。在mutate行中,mutate(lst= map(lst, ~ append(.,new_data)))lst被视为每行一个项目,但有些new_data被视为整列,而不是行中的相应值。< / p>

如何只添加单个值?

1 个答案:

答案 0 :(得分:0)

您需要purrr::pmap,它的功能是&#34;拉链&#34;各种类型(类似于R&#39的基础mapply和python&#39; s zip)。

df %>%
  mutate(lst = pmap(list(lst, new_data), ~ append(..1, ..2))) %>%
  str()
# Classes 'tbl_df', 'tbl' and 'data.frame': 3 obs. of  3 variables:
#  $ abc     : chr  "a" "b" "c"
#  $ lst     :List of 3
#   ..$ : int  1 2 3 1
#   ..$ : int  1 2 3 2
#   ..$ : int  1 2 3 3
#  $ new_data: int  1 2 3

根据thelatemail的建议,您不需要append

df %>%
  mutate(lst = pmap(list(lst, new_data), c))