2016-05-13 7 views
2

In diesem Datenrahmen habe ich für jedes eindeutige Konto viele eindeutige Benutzer. Für jedes Konto habe ich eine Kostenvariable nach Monat. Hier möchte ich eine neue Variable cost2 zum Beispiel schaffen, wo ich nur Kosten halten zu respektieren, die folgende Bedingung: * für jeden Monat, ich möchte nur Kosten niedrig halten nur ein Konto und andere gleich NullAuswählen von Werten für eine Variable hängt von anderen Variablen ab

acount <- c(1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 1) 
user <- c(1:12, 2) 
month <- c(201501, 201501, 201502, 201503, 201503, 201501, 
      201501, 201501, 201502, 201503, 201503, 201501, 201505) 
cost <- c(30, 30 , 25, 40 , 40, 20, 20, 17, 17, -20, 18, 13, 0) 

df <- data.frame(acount, user, month, cost) 

Für Beispiel für das Konto 1, ich will cost2 die folgenden Werte halten: 30, 25, 0

ich versuche es mit der ifelse Aussage zu tun, aber ich bin fest ... Danke

+0

nicht wirklich, was ich will, ist für jeden Monat von acount nur einen Kostenwert zu halten. dieser Wert wird in cost2 sein, aber der andere acount-user wird in diesem Monat Null sein (sorry für mein Englisch) –

+1

Ist das was du willst? 'df%>% group_by (acount, Monat)%>% summarize (cost2 = cost [1])' – Gopala

+0

Ja das ist es, danke aber ist es möglich den anderen user zu behalten und dort cost2 gleich null zu machen? –

Antwort

1

Versuchen:

df %>% 
    group_by(acount, month) %>% 
    mutate(cost2 = ifelse(row_number(cost) == 1, cost, 0)) 

Welche gibt:

#Source: local data frame [13 x 5] 
#Groups: acount, month [10] 
# 
# acount user month cost cost2 
# (dbl) (dbl) (dbl) (dbl) (dbl) 
#1  1  1 201501 30 30 
#2  1  2 201501 30  0 
#3  1  3 201502 25 25 
#4  2  4 201503 40 40 
#5  2  5 201503 40  0 
#6  2  6 201501 20 20 
#7  2  7 201501 20  0 
#8  3  8 201501 17 17 
#9  3  9 201502 17 17 
#10  3 10 201503 -20 -20 
#11  4 11 201503 18 18 
#12  4 12 201501 13 13 
#13  1  2 201505  0  0 
Verwandte Themen