我有一些数据没有为特定变量排序(例如IDS)。我希望能够使用该变量对数据进行分组,并获取列中每个值的比例值,这有助于其组的总数。但是,当使用tapply时,它会重新排序数据,使其符合IDS的顺序,但对于其余的df则不正确。
示例数据和代码:
id_df <- data.frame(IDS = c(2,1,2,1), data = sample(1:4,4,replace = T))
id_df$portions <- unlist(tapply(id_df$data, id_df$IDS, function(x) x / sum(x)))
我得到了什么:
IDS data portions
1 2 1 0.6666667
2 1 4 0.3333333
3 2 1 0.5000000
4 1 2 0.5000000
我想要的是什么:
IDS data portions
1 2 1 0.5000000
2 1 4 0.6666667
3 2 1 0.5000000
4 1 2 0.3333333