我有一个问题,希望你们中的一些人可以帮助我。问题在于:对于包含长度为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
的{{1}}的值。 (注意:我的实际因子值不像上面的例子那样排序,所以只重复向量f
将不起作用),
现在,一个明显的解决方案是在数据框外创建一个向量z
,将其与f
合并,然后使用z
。例如,
merge
然而,我需要重复这个程序几千次,这个 newdf <- data.frame(z=z, f=c(1,2,3))
df <- merge(df, newdf, by="f")
- 解决方案似乎就像在微生物上用大炮射击一样。因此我的问题是:几乎肯定有一种更简单,更有效的方法,但我只是不知道如何做到这一点。有人能指出我正确的方向吗?我正在寻找像merge
或aggregate
的“反向”之类的东西。
答案 0 :(得分: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值。