我有这个数据框和向量,我想用它来划分行:
div <- c(10,100,1000)
df <- as.data.frame(matrix(rep(1,9),nrow=3))
df <- cbind(type = as.factor(c("A","B","C")),df)
> df
type V1 V2 V3
1 A 1 1 1
2 B 1 1 1
3 C 1 1 1
我想要数据框形式的答案,并且因素保持原样。
当它与向量相除时,我得到“错误”的答案:
df1 <- cbind(df[,1], df[,-1]/div)
> df1
df[, 1] V1 V2 V3
1 A 0.100 0.100 0.100
2 B 0.010 0.010 0.010
3 C 0.001 0.001 0.001
我想要每一行除以向量,而不是每一列。
我的解决方法是这样的:
divfun <- function(x){
x / div
}
df2 <- cbind(df[,1], t(apply(df[,-1], 1, divfun)))
> df2
V1 V2 V3
[1,] 1 0.1 0.01 0.001
[2,] 2 0.1 0.01 0.001
[3,] 3 0.1 0.01 0.001
请注意,这些因子现在已丢失。
所以这里有两个问题:
- 有没有更简单的方法来做到这一点,而不需要为其创建新功能?
- 假设没有更简单的方法,我的因素 A、B 和 C 发生了什么?我猜测这与强制矩阵有关(因为
t()
)?