我想将多个空列添加到小标题。 新列的名称存储在'columnsToAdd'
> columnsToAdd
[1] "column1" "column2" "column3" "column4" "column5"
当我运行以下代码行时,...
library(dplyr)
someTibble <- tibble(name = paste("Name", 1:10))
columnsToAdd <- paste("column", 1:30, sep = "")
someTibble %>%
tibble::add_column(columnsToAdd = NA)
...我得到这个结果,...
# A tibble: 10 x 2
name columnsToAdd
<chr> <lgl>
1 Name 1 NA
2 Name 2 NA
3 Name 3 NA
4 Name 4 NA
5 Name 5 NA
6 Name 6 NA
7 Name 7 NA
8 Name 8 NA
9 Name 9 NA
10 Name 10 NA
...相反,我想得到以下结果:
# A tibble: 10 x 6
name column1 column2 column3 column4 column5
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Name 1 NA NA NA NA NA
2 Name 2 NA NA NA NA NA
3 Name 3 NA NA NA NA NA
4 Name 4 NA NA NA NA NA
5 Name 5 NA NA NA NA NA
6 Name 6 NA NA NA NA NA
7 Name 7 NA NA NA NA NA
8 Name 8 NA NA NA NA NA
9 Name 9 NA NA NA NA NA
10 Name 10 NA NA NA NA NA
答案 0 :(得分:5)
只需将它们创建为列即可。这适用于基本数据帧和data.table表:
例如:
> someTibble <- tibble(name = paste("Name", 1:10))
> columnsToAdd <- paste("column", 1:3,sep="")
这给了我一列:
> head(someTibble)
# A tibble: 6 x 1
name
<chr>
1 Name 1
2 Name 2
3 Name 3
4 Name 4
5 Name 5
6 Name 6
然后我这样做:
> someTibble[,columnsToAdd]=NA
神奇地出现了列:
> head(someTibble)
# A tibble: 6 x 4
name column1 column2 column3
<chr> <lgl> <lgl> <lgl>
1 Name 1 NA NA NA
2 Name 2 NA NA NA
3 Name 3 NA NA NA
4 Name 4 NA NA NA
5 Name 5 NA NA NA
6 Name 6 NA NA NA
请注意,这并不是真正的魔术,这是自R诞生之前的标准基本R行为。
答案 1 :(得分:0)
您在tibble::add_column(columnsToAdd = NA)
中看到的是dplyr和tidyr引入的准事物评估。如果您检查定义:
> args(add_column)
function (.data, ..., .before = NULL, .after = NULL)
您将看到它不期望某个变量。它实际上需要实际的变量名,不带引号。
一种完全不同的方法是创建一个矩阵(或data.frame,不管您喜欢什么,让它挠痒痒),然后将其粘贴到someTibble
的一侧:
extra <- matrix(NA_real_, nrow=nrow(someTibble), ncol=length(columnsToAdd), dimnames=list(NULL, columnsToAdd))
dplyr::bind_cols(someTibble, as.data.frame(extra))
答案 2 :(得分:0)
我们可以将列名称作为列表传递,然后使用!!!
“三重爆炸”
columnsToAdd <- paste("column", 1:5, sep = "")
someTibble %>%
tibble::add_column(!!!set_names(as.list(rep(NA, length(columnsToAdd))),nm=columnsToAdd))
# A tibble: 6 x 6
name column1 column2 column3 column4 column5
<chr> <lgl> <lgl> <lgl> <lgl> <lgl>
1 Name 1 NA NA NA NA NA
2 Name 2 NA NA NA NA NA
3 Name 3 NA NA NA NA NA
4 Name 4 NA NA NA NA NA
5 Name 5 NA NA NA NA NA
6 Name 6 NA NA NA NA NA
但是,我认为@MrGumble可能会错过add_column {tibble}
...名称-值对,传递给tibble()。所有值在数据帧中的每一行必须具有一个元素,或者长度为1。这些参数传递给tibble(),因此也支持通过!!取消引用。并通过!!!取消引用拼接。
这是tibble {tibble}
tibble(!!! list(x = rlang::quo(1:10), y = quote(x * 2)))