在对this question的非常优雅的回答中,akrun表明,只需很少的工作就可以将行的数字数据框标准化:
df <- as.data.frame(t(matrix(seq(1,9), nrow = 3, ncol = 3)))
V1 V2 V3
1 1 2 3
2 4 5 6
3 7 8 9
df / rowSums(df)
V1 V2 V3
1 0.1666667 0.3333333 0.500
2 0.2666667 0.3333333 0.400
3 0.2916667 0.3333333 0.375
我的问题是,为什么这样做会如此?我对R数据帧的理解是它们是列表的特例,并且我不希望矩阵运算能够自动工作。我至少希望优先考虑按列操作(即,我希望上面的除法运算将每个列除以rowSums
向量的每个元素)。