2016-04-15 5 views
3

Ich muss data.frame durch irgendeine Variable teilen und Unterschied zwischen dem Wert jeder Reihe und Wert von irgendeiner anderen spezifizierten Reihe berechnen.data.frame durch Variable teilen und Funktion anwenden, die sich auf konkrete Reihe bezieht

In Beispiel unten, teile ich df von v1. Dann für jede Zeile von v3 die Differenz zwischen dem tatsächlichen Wert und v3[v2 == "C"] berechnen.

v1 <- rep(1:4,each = 3) 
v2 <- rep(c("A","B","C"),4) 
v3 <- rep(1:5,3)[1:12] 
res <- c(-2,-1,0,3,4,0,-2,-1,0,3,-1,0) 
df <- data.frame(v1,v2,v3,res) 

df 
    v1 v2 v3 res 
1 1 A 1 -2 
2 1 B 2 -1 
3 1 C 3 0 
4 2 A 4 3 
5 2 B 5 4 
6 2 C 1 0 
7 3 A 2 -2 
8 3 B 3 -1 
9 3 C 4 0 
10 4 A 5 3 
11 4 B 1 -1 
12 4 C 2 0 

Ich ziehe plyr oder data.table, wenn möglich.

+1

eine 'dplyr' Alternative:' df%>% group_by (v1)%>% mutieren (res = v3 - v3 [v2 == 'C']) ' – Jaap

Antwort

5

Hier ist eine Datentabelle Lösung:

library(data.table) 
setDT(df) 
df[, new := v3 - v3[v2=="C"], by = "v1"] 
Verwandte Themen