【问题标题】:ddply and spaces in quoted variables引用变量中的 ddply 和空格
【发布时间】:2011-07-04 19:05:44
【问题描述】:

ddply可以使用空格吗?

我正在使用列名中有很多空格的电子表格中的数据,我想保留这些名称,因为稍后我想以与原始列名相同的列名导出这些数据。有 200 多个列,使用 make.names 当然会给我正确的名称,但我会丢失原始列名。

但是 ddply 似乎不喜欢空格?有解决办法吗?

lev=gl(2, 3, labels=c("low", "high"))
df=data.frame(factor=lev, "fac tor"=lev, response=1:6, check.names = FALSE)

> ddply(df, c("factor"), summarize, r.avg=mean(response))
factor r.avg
1    low     2
2   high     5

> ddply(df, c("fac tor"), summarize, r.avg=mean(response))
Error in parse(text = x) : <text>:1:5: unexpected symbol
: fac tor

【问题讨论】:

  • 我想你的意思是上面的check.names = FALSETRUE 强制强制到 fac.tor

标签: r plyr


【解决方案1】:

用单个反引号 (`) 包装列名似乎可以解决问题。

ddply(df, "`fac tor`", summarize, r.avg=mean(response))

您还可以使用列索引,这取决于您的 data.frame 的大小以及您事先对每列位置的了解。

ddply(df, 2, summarize, r.avg=mean(response))

【讨论】:

  • +1 是的,使用反引号是要走的路。仅供参考,plyr 提供了.() 函数,允许您指定列名而无需引用它们。所以我更喜欢写ddply(df, .(`fac tor`), summarize, r.avg=mean(response))
  • 谢谢,这正是我需要的。
【解决方案2】:

我会使用正则表达式将空格转换为一些无意义的字符,然后在最后转换回来:

lev=gl(2, 3, labels=c("low", "high"))
df=data.frame(factor=lev, "fac tor"=lev, response=1:6, check.names = FALSE)
colnames(df) <- gsub(" ","~",colnames(df))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多