R语言 从名称列表向tibble添加列[duplicate]

nle07wnf  于 2023-03-15  发布在  其他
关注(0)|答案(2)|浏览(162)

此问题在此处已有答案

How to add multiple columns to a data.frame in one go?(2个答案)
21小时前关门了。
我有一个需要向tibble中添加任意数量的列的情况。我需要添加的列名将来自一个列表。
如果只有一列,这很容易,我只会使用add_column()
例如,从tibbledf* 开始,我可以添加列c**,如下所示:

library(tidyverse)

df <- tibble(a = 1:3, b = 3:1)
df <- add_column(df, c = 0)

结果是...

# A tibble: 3 × 3
      a     b     c
  <int> <int> <dbl>
1     1     3     0
2     2     2     0
3     3     1     0

这使我相信,如果我想添加多个列,例如从列表new_cols中添加多个列,我可以将它们Map到add_column()上,但由于某种原因,我不能。

library(tidyverse)

df <- tibble(a = 1:3, b = 3:1)

new_cols <- c('d','e','f')

map(new_cols, ~ df <- add_column(df, . = 0))

......当然,再多考虑一些map()是错误的想法--map的全部意义是生成一个列表,而不是副作用。
我相信有一个简单的一行程序,但它逃脱了我现在。

bqf10yzr

bqf10yzr1#

df[new_cols] <- 0

# A tibble: 3 × 5
      a     b     d     e     f
  <int> <int> <dbl> <dbl> <dbl>
1     1     3     0     0     0
2     2     2     0     0     0
3     3     1     0     0     0
hvvq6cgz

hvvq6cgz2#

如果您搜索map之类的purrr解决方案,请尝试reduce

reduce(new_cols, ~ add_column(.x, '{.y}' := 0), .init = df)

# # A tibble: 3 × 5
#       a     b     d     e     f
#   <int> <int> <dbl> <dbl> <dbl>
# 1     1     3     0     0     0
# 2     2     2     0     0     0
# 3     3     1     0     0     0

还可以使用拼接操作符!!!将命名向量或命名参数列表注入add_column()

new_names <- c('d','e','f')
new_cols <- set_names(rep(0, length(new_names)), new_names)

new_cols
# d e f 
# 0 0 0

add_column(df, !!!new_names)

# # A tibble: 3 × 5
#       a     b     d     e     f
#   <int> <int> <dbl> <dbl> <dbl>
# 1     1     3     0     0     0
# 2     2     2     0     0     0
# 3     3     1     0     0     0

相关问题