带有cbind的自动列前缀和只有一列
我在使用cbind将列添加到数据框的脚本中遇到了一些麻烦。 我通过正则表达式选择这些列,我爱如果添加多个列,cbind会自动提供前缀。 如果你只是附加一列,那么这个工作不起作用......即使我将这一列作为数据框架...
有没有办法解决这个问题?
在我的例子中,它适用于以a开头但不适用于b1列的列。
df <- data.frame(a1=c(1,2,3),a2=c(3,4,5),b1=c(6,7,8))
cbind(df, log=log(df[grep('^a', names(df))]))
cbind(df, log=log(df[grep('^b', names(df))]))
cbind(df, log=as.data.frame(log(df[grep('^b', names(df))])))
解决办法是用日志值创建一个中间数据框并重命名列:
logb = log(df[grep('^b', names(df))]))
colnames(logb) = paste0('log.',names(logb))
cbind(df, logb)
关于什么
cbw <- c("a","b") # columns beginning with
cbw_pattern <- paste0("^",cbw, collapse = "|")
cbind(df, log=log(df[grep(cbw_pattern, names(df))]))
这样你就可以一次选择两种模式。 (全部三列)。
只有只选择了一列,名称才不适合。