这是一个示例数据框
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>
如何只添加单个值?
答案 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))