使用for循环来改变r中的data.frame

时间:2017-10-20 09:04:34

标签: r for-loop dataframe

我正在尝试处理我拥有的数据框,但我很难找到与名称相关的最新日期以及与名称相关的总和。我的框架看起来像这样

a<-
Date         Name         Sum
<date>       <chr>       <dbl>

23.02.2017  Johnny        6     
24.02.2017  Jane          20        
24.02.2017  Micky Mouse   20        
27.02.2017  Jane          20        
3.03.2017   Johnny        20        
3.03.2017   Ronald        25    

我想得到类似的东西

b<-
Latest Date         Name         Frequency     Total Sum
<date>              <chr>          <dbl>          <dbl>

3.03.2017           Johnny           2             26
27.02.2017          Jane             2             40
24.02.2017          Micky Mouse      1             20       
3.03.2017           Ronald           1             25   

我开始使用表函数然后使用for循环,但我有点像菜鸟。

b <- data.frame(table(a$Name))
# after cleaning
b<-
Name         Frequency  
<chr>          <int>         

Johnny           2            
Jane             2            
Micky Mouse      1                
Ronald           1   


for (i in (a$Name)) {
  b <- a %>%
    mutate(Total Sum = sum(a$Sum[a$Name == i] %>%
    mutate(Latest Date = max(a$date[a$Name == i]))
}

这会返回一个看起来像这样的数据框

b<-

Name         Frequency        Total Sum     Latest Date
<chr>          <int>            <dbl>         <date>

Johnny           2               40          27.02.2017
Jane             2               40          27.02.2017
Micky Mouse      1               40          27.02.2017
Ronald           1               40          27.02.2017

我怎样才能确保总和只是约翰尼,简......以及日期是与该名称相关的最新日期

2 个答案:

答案 0 :(得分:0)

这应该有效:

df <- read.table(text = "Date         Name         Sum
                  1  23.02.2017  Johnny        6     
                  2  24.02.2017  Jane          20        
                  3  24.02.2017  Micky_Mouse   20        
                  4  27.02.2017  Jane          20        
                  5  3.03.2017   Johnny        20        
                  6  3.03.2017   Ronald        25")  

df%>%group_by(Name)%>%
  mutate(Date_Formated = as.Date(Date, format = "%d.%m.%Y"))%>%
  summarise(totalByName = sum(Sum),firstDate = max(Date_Formated))


# A tibble: 4 x 3
         Name totalByName  firstDate
       <fctr>       <int>     <date>
1        Jane          40 2017-02-24
2      Johnny          26 2017-02-23
3 Micky_Mouse          20 2017-02-24
4      Ronald          25 2017-03-03

答案 1 :(得分:-3)

您可以使用M R套餐中的group_bysummarise

dplyr