【问题标题】:combine data.frame columns to new columns by vector of names通过名称向量将 data.frame 列组合到新列
【发布时间】:2014-12-07 10:37:37
【问题描述】:

我喜欢将 data.frame 的一些列组合成一个新列,例如

dat <- data.frame(
  color = sample(c("r","y","b"), 10, replace = TRUE), 
  year = sample(2011:2014, 10, replace = TRUE),
  type = sample(c("early","mid","late"), 10, replace = TRUE))

dat$tot1 <- paste(dat$color, dat$year, dat$type)

这行得通,但是我如何根据列名来做到这一点?

cnames <- c("color","year","type")

dat$tot2 <- do.call(paste, list(cnames,collapse=""))

当然,这仅提供一个包含“coloryeartype”条目的列,与dat$tot1 不同。你会怎么做? do.call(paste, list(get(cnames),collapse=""))报错Error in get(cnames) : object 'color' not found

谢谢 克里斯托夫

【问题讨论】:

    标签: r dataframe paste do.call


    【解决方案1】:

    随便用

     do.call(paste, dat[cnames])
    #[1] "y 2011 mid"   "r 2012 mid"   "r 2013 late"  "r 2014 mid"   "r 2011 late" 
    #[6] "b 2012 early" "y 2014 early" "r 2013 mid"   "r 2011 late"  "b 2014 early"
    

    如果需要different分隔符

     do.call(paste, c(dat[cnames], sep=","))
    

    【讨论】:

    • @ChristofKluß 没问题。
    【解决方案2】:

    这是另一种方式-

    apply(dat[cnames], 1, function(x){paste(x, collapse=" ")})
    #  [1] "b 2011 early" "r 2014 mid"   "y 2012 early" "y 2013 late"  "y 2011 late" 
       [6] "y 2014 late"  "b 2011 mid"   "b 2011 early" "b 2011 mid"   "y 2013 late" 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 2021-10-26
      • 2015-08-26
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 2015-07-25
      相关资源
      最近更新 更多