使用for循环变异r中
问题描述:
一个data.frame我想,我有一个数据帧上工作,但我在努力寻找一个名字和一个名称相关联的总和相关的最新日期。我的框架看起来是这样的使用for循环变异r中
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
数据帧我怎样才能确保总和仅仅是约翰尼,简的同时,该日期为与该名称关联的最新日期
答
您可以使用dplyr
R Package中的group_by
和summarise
。
b <- a %>%
group_by(Name) %>%
summarise(Total_Sum = sum(Sum))
c <- a %>%
count(Name)
df <- left_join(b, c)
答
这应该工作:
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
'库(dplyr); df%>%group_by(Name)%>%summarize(Total_Sum = sum(Sum),Latest_Date = max(Date))'应该有效。 – Axeman
另请参阅此处(https://stackoverflow.com/questions/1660124/how-to-sum-a-variable-by-group)。 – Axeman
美丽。谢谢! –