带有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))]))

这样你就可以一次选择两种模式。 (全部三列)。
只有只选择了一列,名称才不适合。

链接地址: http://www.djcxy.com/p/83751.html

上一篇: automatic column prefix with cbind and just one column

下一篇: Convert Excel to JSON using Angularjs