dplyr 按变量值连接列

dplyr concatenate column by variable value

我可以连接 data.frame 的一列,如果列名可用,请按照下面的代码进行连接。

测试代码如下:

> library(dplyr)
> packageVersion("dplyr")
[1] ‘1.0.7’

> df <- data.frame(x = 1:3, y = c("A", "B", "A"))
> df %>%
  group_by(y) %>%
  summarise(z = paste(x, collapse = ","))

# A tibble: 2 x 2
  y     z    
  <chr> <chr>
1 A     1,3  
2 B     2  

我有一个变量a,其值为x,我如何做以上总结?

> a <- "x"
> df %>%
  group_by(y) %>%
  summarise(z = paste(a, collapse = ","))

# A tibble: 2 x 2
  y     z    
  <chr> <chr>
1 A     x    
2 B     x

方案一:使用!!sym()

> a <- "x"
> df %>%
  group_by(y) %>%
  summarise(z = paste(!!sym(a), collapse = ","))

# A tibble: 2 x 2
  y     z    
  <chr> <chr>
1 A     1,3  
2 B     2 

解决方案 2:将列分配给新变量

> df %>%
  group_by(y) %>%
  rename(new_col = a) %>%
  summarise(z = paste(new_col, collapse = ","))

# A tibble: 2 x 2
  y     z    
  <chr> <chr>
1 A     1,3  
2 B     2  

还有其他方法可以完成这项工作吗?

可以找到类似的问题: ,,

这里有一些其他选项 -

  1. 使用.data-
library(dplyr)

a <- "x"
df %>% group_by(y) %>% summarise(z = toString(.data[[a]]))

#   y     z    
#  <chr> <chr>
#1 A     1, 3 
#2 B     2    
  1. get
df %>% group_by(y) %>% summarise(z = toString(get(a)))
  1. as.name
df %>% group_by(y) %>% summarise(z = toString(!!as.name(a)))

paste(..., collapse = ',') 等同于 toString.