2017-03-18 5 views
2

Ich habe Probleme. Lassen Sie mich Ihnen ein Beispiel geben.Zeile einfügen basierend auf ID in 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 

Meine gewünschte Ausgabe ist wie unter

# 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 

Wie kann ich es tun ??

Antwort

1

Wir die Datensätze rbind und dann tun, um eine 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 
+0

great !! Danke ~~ Es ist wirklich hilfreich !! –

Verwandte Themen