2

我有一个问题,希望你们中的一些人能帮助我。问题是这样的:对于包含长度为 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 的向量,其中包含z对应于因子 level 的值f。(注意:我的实际因子值不像上面的例子那样排序,所以只是重复向量是z行不通的),

f现在,一个明显的解决方案是在数据框之外创建一个向量,将其zmerge. 例如,

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

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

4

1 回答 1

3

假设 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 值。

于 2013-12-10T22:13:52.183 回答