我遇到了问题。 我举个例子。
x <- data.frame(id = letters[1:3], val0 = 1:3, val1 = 4:6, val2 = 7:9)
# id val0 val1 val2
# 1 a 1 4 7
# 2 b 2 5 8
# 3 c 3 6 9
cbind(id = x[, 1], x[, -1]/rowSums(x[, -1]))
## id val0 val1 val2
## 1 a 0.08333333 0.3333333 0.5833333
## 2 b 0.13333333 0.3333333 0.5333333
## 3 c 0.16666667 0.3333333 0.5000000
我想要的输出如下
# id val0 val1 val2
# 1 a 1 4 7
# 1 a 0.08333333 0.3333333 0.5833333
# 2 b 2 5 8
# 2 b 0.13333333 0.3333333 0.5333333
# 3 c 3 6 9
# 3 c 0.16666667 0.3333333 0.5000000
我该怎么做?
答案 0 :(得分:1)
我们可以rbind
数据集,然后执行order
library(data.table)
rbindlist(list(x, cbind(id = x[, 1], x[, -1]/rowSums(x[, -1]))))[order(id)]
# id val0 val1 val2
#1: a 1.00000000 4.0000000 7.0000000
#2: a 0.08333333 0.3333333 0.5833333
#3: b 2.00000000 5.0000000 8.0000000
#4: b 0.13333333 0.3333333 0.5333333
#5: c 3.00000000 6.0000000 9.0000000
#6: c 0.16666667 0.3333333 0.5000000