在r中基于Id插入行

时间:2017-03-18 03:15:07

标签: r

我遇到了问题。 我举个例子。

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

我该怎么做?

1 个答案:

答案 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