有没有一种方法可以一次粘贴数据帧中的所有列

asd <- data.frame(a = c("A", "B"), b = c(1,2))

我需要粘贴所有列(a和b),并更改A列,如下所示

asd$a <- paste0(asd$a, "_", asd$b)

但是有没有办法实现自动化,因为如果一个数据帧有很多列(a、b、c等等).

asd <- data.frame(a = c("A", "B"), b = c(1,2), c = c(1,2), x = c(1,2))

预期yields (只需组合a、b和c)

asd
      a    b  c  x
1 A_1_1    1  1  1
2 B_2_2    2  2  2

我们可以用asd$a <- paste0(asd$a, "_", asd$b, "_", asd$c)来做,但要找一些简单的方法.

我try 了下面的功能,但不工作


paste_function <- function(df, df_col = c(a, b)){
  for (i in df_col){
    return(substr(paste0(df,'$',df_col,collapse = ",", sep = ",'_'"), 1,nchar(paste0(df,'$',df_col,collapse = ",", sep = ",'_'"))-4))
  }
}

asd$a <- paste_function(asd, df_col = c(a, b, c))

推荐答案

使用do.call

asd$a <- do.call(paste, c(asd, sep = '_'))
asd
        a b c d
1 A_1_1_1 1 1 1
2 B_2_2_2 2 2 2

其他方式包括:

rlang::exec(paste, !!!asd, sep = '_')
purrr::lift(paste)(asd, sep = '_') # deprecated
purrr::invoke(paste, asd, sep = '_') # deprecated

R相关问答推荐

在边界外添加注释或标题

基于现有类创建类的打印方法(即,打印tibles更长时间)

在位置周围设定一个半径并识别该半径内的其他位置

如何编辑gMarginal背景以匹配绘图背景?

一小时满足条件的日期的 Select

在ggplot2中更改小提琴情节的顺序

以更少间隔的较小表中的聚合离散频率表

如何在分组条形图中移动相关列?

有效识别长载体中的高/低命中

计算满足R中条件的连续列

将Posict转换为数字时的负时间(以秒为单位)

Geom_arcbar()中出错:找不到函数";geom_arcbar";

防止在更新SHINY中的Reactive Value的部分内容时触发依赖事件

快速合并R内的值

使用ggplot2绘制具有边缘分布的坡度图

从矩阵创建系数图

如何使用list_rind在列表中保留已命名但不包含第0行的记录?

如何根据每个子框架中分类因子的唯一计数来过滤子框架列表?

通过分析特定列中的字符串在数据框中创建新的行和列

在shiny /bslb中,当卡片是从json生成时,如何水平排列卡片?