paste()ing 名称存储在变量中的列
paste()ing columns whose names are stored in a variable
如何根据名称包含在字符向量中的列创建新列?
鉴于这两个变量:
data <- tibble(numbers = 1:10, letters = letters[1:10])
columns <- c("numbers","letters")
什么命令会产生这个输出?
# A tibble: 10 x 3
numbers letters combined
<int> <chr> <chr>
1 1 a 1-a
2 2 b 2-b
3 3 c 3-c
4 4 d 4-d
5 5 e 5-e
6 6 f 6-f
7 7 g 7-g
8 8 h 8-h
9 9 i 9-i
10 10 j 10-j
我的第一个想法是 mutate(data, combined = paste(!!columns, sep = "-"))
但这行不通。
Error: Problem with `mutate()` input `combined`.
x Input `combined` can't be recycled to size 10.
ℹ Input `combined` is `paste(c("numbers", "letters"))`.
ℹ Input `combined` must be size 10 or 1, not 2.
不是最漂亮的,但这个应该可以
do.call(
paste,
c(data[, columns], list(sep = '-'))
)
tidyverse
方法是使用 unite
,您可以将 columns
向量直接传递到函数中,而不必使用 !!
.
library(tidyverse)
data %>%
tidyr::unite("combined", columns, sep = "-", remove = FALSE) %>%
dplyr::relocate(combined, .after = tidyselect::last_col())
输出
numbers letters combined
<int> <chr> <chr>
1 1 a 1-a
2 2 b 2-b
3 3 c 3-c
4 4 d 4-d
5 5 e 5-e
6 6 f 6-f
7 7 g 7-g
8 8 h 8-h
9 9 i 9-i
10 10 j 10-j
cbind( data , combined = paste( data[[ columns[1] ]], data[[ columns[2] ]], sep=“-“)
如何根据名称包含在字符向量中的列创建新列?
鉴于这两个变量:
data <- tibble(numbers = 1:10, letters = letters[1:10])
columns <- c("numbers","letters")
什么命令会产生这个输出?
# A tibble: 10 x 3
numbers letters combined
<int> <chr> <chr>
1 1 a 1-a
2 2 b 2-b
3 3 c 3-c
4 4 d 4-d
5 5 e 5-e
6 6 f 6-f
7 7 g 7-g
8 8 h 8-h
9 9 i 9-i
10 10 j 10-j
我的第一个想法是 mutate(data, combined = paste(!!columns, sep = "-"))
但这行不通。
Error: Problem with `mutate()` input `combined`.
x Input `combined` can't be recycled to size 10.
ℹ Input `combined` is `paste(c("numbers", "letters"))`.
ℹ Input `combined` must be size 10 or 1, not 2.
不是最漂亮的,但这个应该可以
do.call(
paste,
c(data[, columns], list(sep = '-'))
)
tidyverse
方法是使用 unite
,您可以将 columns
向量直接传递到函数中,而不必使用 !!
.
library(tidyverse)
data %>%
tidyr::unite("combined", columns, sep = "-", remove = FALSE) %>%
dplyr::relocate(combined, .after = tidyselect::last_col())
输出
numbers letters combined
<int> <chr> <chr>
1 1 a 1-a
2 2 b 2-b
3 3 c 3-c
4 4 d 4-d
5 5 e 5-e
6 6 f 6-f
7 7 g 7-g
8 8 h 8-h
9 9 i 9-i
10 10 j 10-j
cbind( data , combined = paste( data[[ columns[1] ]], data[[ columns[2] ]], sep=“-“)