如何使用dplyr粘贴列的子集

如何使用dplyr粘贴列的子集,r,dplyr,R,Dplyr,如何使用dplyr将data.frame中的动态列子集粘贴在一起 如果我有以下功能: d = data.frame(a = 1:5, b=2:6, c=3:7) fun = function(d, colnames){ d$f = Reduce(function(x,y)paste(x,y,sep='_'), d[,colnames]) return(d) } fun(d, c('a','b')) fun(d, c('b','c')) fun(d, c('a','b'

如何使用dplyr将data.frame中的动态列子集粘贴在一起

如果我有以下功能:

d = data.frame(a = 1:5, b=2:6, c=3:7)

fun = function(d, colnames){

    d$f = Reduce(function(x,y)paste(x,y,sep='_'), d[,colnames])

    return(d)
}

fun(d, c('a','b'))

fun(d, c('b','c'))

fun(d, c('a','b','c'))

如何使用dplyr重写函数?

这适用于您的示例:

> library(dplyr)    
> d = data.frame(a = 1:5, b=2:6, c=3:7)
> d <- d %>% mutate(f = paste(a,b,sep='_'))
> d
  a b c   f
1 1 2 3 1_2
2 2 3 4 2_3
3 3 4 5 3_4
4 4 5 6 4_5
5 5 6 7 5_6
编辑:

编辑后,这将适用于您:

> library(dplyr)
> d = data.frame(a = 1:5, b=2:6, c=3:7)
> colnames <- c("a", "c")
> d <- d %>% mutate(f = paste(!!as.name(colnames[1]),!!as.name(colnames[2]),sep='_'))     
> d
  a b c   f
1 1 2 3 1_3
2 2 3 4 2_4
3 3 4 5 3_5
4 4 5 6 4_6
5 5 6 7 5_7

这适用于您的示例:

> library(dplyr)    
> d = data.frame(a = 1:5, b=2:6, c=3:7)
> d <- d %>% mutate(f = paste(a,b,sep='_'))
> d
  a b c   f
1 1 2 3 1_2
2 2 3 4 2_3
3 3 4 5 3_4
4 4 5 6 4_5
5 5 6 7 5_6
编辑:

编辑后,这将适用于您:

> library(dplyr)
> d = data.frame(a = 1:5, b=2:6, c=3:7)
> colnames <- c("a", "c")
> d <- d %>% mutate(f = paste(!!as.name(colnames[1]),!!as.name(colnames[2]),sep='_'))     
> d
  a b c   f
1 1 2 3 1_3
2 2 3 4 2_4
3 3 4 5 3_5
4 4 5 6 4_6
5 5 6 7 5_7

这是一个使用dplyr和rlang的函数版本

使现代化
这是一个使用dplyr和rlang的函数版本

使现代化
如何动态指定列?@user680111您能解释一下吗?也许用你想要的输出更新/编辑你的问题?不确定您现在想要什么,抱歉。@user680111我看到了您的编辑并更改了我的答案。我想这就是你的意思?@user680111如果每次有人回答你当前的问题时你都要问一个新问题,请打开一个新的话题。或者在第一篇文章中指定您的问题,这样我们可以继续编辑..如何使用dplyr将data.frame中的动态列子集粘贴在一起?如果不够清晰,很抱歉。如何动态指定列?@user680111您能解释一下吗?也许用你想要的输出更新/编辑你的问题?不确定您现在想要什么,抱歉。@user680111我看到了您的编辑并更改了我的答案。我想这就是你的意思?@user680111如果每次有人回答你当前的问题时你都要问一个新问题,请打开一个新的话题。或者在第一篇文章中指定您的问题,这样我们可以继续编辑..如何使用dplyr将data.frame中的动态列子集粘贴在一起?如果不够清晰,请道歉。谢谢您的回答!如果列数可变,我将如何执行此操作?-我已经编辑了示例谢谢你的回答!如果列数可变,我将如何执行此操作?-我已经编辑了这个例子