NA我想使用 向 data.frame添加几列(填充) dplyr。我已经在字符向量中定义了列的名称。通常,只有一个新列,您可以使用以下模式:
test %>% \n mutate(!!new_column := NA)\nRun Code Online (Sandbox Code Playgroud)\n但是,我无法让它工作across:
test %>% \n mutate(!!new_column := NA)\nRun Code Online (Sandbox Code Playgroud)\n由reprex 包于 2021 年 10 月 5 日创建(v1.0.0)
\n使用第一种方法,列名已正确创建,但随后它直接尝试在现有列名中查找它。在第二种方法中,除了单个字符串之外,我不能使用任何其他东西。
\n有没有tidyverse解决方案或者我需要诉诸旧for循环?
!!单个元素的作品
for(nm in add_cols) test <- test %>%
mutate(!! nm := NA)
Run Code Online (Sandbox Code Playgroud)
-输出
> test
a col_1 col_2
1 1 NA NA
2 2 NA NA
3 3 NA NA
Run Code Online (Sandbox Code Playgroud)
或者另一个选择是
test %>%
bind_cols(setNames(rep(list(NA), length(add_cols)), add_cols))
a col_1 col_2
1 1 NA NA
2 2 NA NA
3 3 NA NA
Run Code Online (Sandbox Code Playgroud)
在 中base R,这更容易
test[add_cols] <- NA
Run Code Online (Sandbox Code Playgroud)
可以用在管道中
test %>%
`[<-`(., add_cols, value = NA)
a col_1 col_2
1 1 NA NA
2 2 NA NA
3 3 NA NA
Run Code Online (Sandbox Code Playgroud)
across仅当列已经存在时才有效,即建议循环across数据中存在的列并进行一些修改/创建经过.names修改的新列
add_column我们可以利用tibble
library(tibble)
library(janitor)
add_column(test, !!! add_cols) %>%
clean_names %>%
mutate(across(all_of(add_cols), ~ NA))
a col_1 col_2
1 1 NA NA
2 2 NA NA
3 3 NA NA
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2509 次 |
| 最近记录: |