【问题标题】:Reverse of aggregate / by?聚合/按?
【发布时间】:2013-07-30 20:20:15
【问题描述】:

我有一个问题,希望你们中的一些人能帮助我。问题是这样的:对于一个给定的数据帧,它包括一个长度为 n 的向量 y 和一个具有 k 个不同级别的因子 f,我想根据 f 为数据帧分配一个长度为 k 的新变量 z。

例子:

 df <- data.frame(y=rnorm(12), f=rep(1:3, length.out=12))
 z  <- c(-1,0,5)

请注意,我的真实z 已构建为对应于唯一因子水平,这就是length(z) = length(unique(df$f) 的原因。我现在想创建一个长度为 n=12 的向量,其中包含与因子级别 f 对应的 z 的值。 (注意:我的实际因子值没有像上面的例子那样排序,所以只重复向量z 是行不通的),

现在,一个明显的解决方案是在数据框外创建一个向量f,将其与z 合并,然后使用merge。例如,

 newdf <- data.frame(z=z, f=c(1,2,3))
 df <- merge(df, newdf, by="f")

但是,我需要将这个过程重复数千次,而这个merge-解决方案看起来就像用大炮对微生物进行射击。因此我的问题是:几乎可以肯定有一种更简单、更有效的方法来做到这一点,但我只是不知道怎么做。谁能指出我正确的方向?我正在寻找类似aggregateby 的“逆”。

【问题讨论】:

  • 您可能希望edit 带有语言标签的问题,以增加它引起能够回答的用户注意的机会。

标签: r merge aggregate expand r-factor


【解决方案1】:

假设 z 中的值对应于 f 个级别

df <- data.frame(y=rnorm(12), f= sample(c("a","b","c"),12,replace=T))
z  <- c(-1,0,5)
df$newz<-z[df$f]

如果不清楚:这是可行的,因为因子以整数形式存储在幕后。当您使用该因子向量索引 z 时,您实际上是使用基础整数进行索引,这些整数指向该因子值的正确 z 值。

【讨论】:

  • 这比我想象的还要容易。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-09-07
  • 2019-10-29
  • 1970-01-01
  • 2019-01-31
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多