2016-05-13 60 views
2

在此数据框中,对于每个唯一的计数,我有许多独特的用户。对于每个帐户,我有一个月的成本变量。在这里,我想创建例如一个新的变量cost2,我只保留尊重以下条件成本: *每个月,我想只保留成本只有一个帐户和其他等于零在变量上选择值取决于其他变量

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) 

对于例如对于帐户1,我想保持在cost2了以下值:30,25,0

我试图与ifelse语句来做到这一点,但我坚持...... 谢谢

+0

不是真的,我要的是每个月由acount只保留一个成本值。这个价值将在cost2,但其他acount用户本月将为零(对不起,我的英语) –

+1

这是你想要的吗? 'df%>%group_by(acount,month)%>%summarize(cost2 = cost [1])' – Gopala

+0

是的,这是它,谢谢,但有可能保持另一个用户,并使cost2等于零? –

回答

1

Try:

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

其中给出:

#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