在 ddply summarize 期间从 df 中选择一个值

selecting a value from df during ddply summarise

我想使用 ddplysummarise 来获取几年数据的月中值。我可以成功地做到这一点。但是,我还希望有一列包含一年数据的值。我知道添加它的其他方法,但想在 ddply 行中进行。数据在底部。

如果所有年份的中位数为 16 且 2018 年的值为 30,则结果的第一行将如下所示:

Month Median 2018
 
Apr   16.0   30

这是我尝试过的: 这按预期工作:

Summary<-ddply(df, ~Month, summarise, Median = median(Value))
Summary

当我尝试添加单个年份值时,我似乎想不出办法:

Summary<-ddply(df, ~Month, summarise, Median = median(Value), SingleYearValue = which(df[,"Year"]==2018));Summary

df<-structure(list(Month = c("Apr", "Apr", "Apr", "Apr", "Apr", "Apr", 
                             "Apr", "Apr", "Apr", "Apr", "Apr", "Apr", "Apr", "Apr", "Apr", 
                             "Apr", "Apr", "Apr", "Apr", "Apr", "Apr", "Apr", "Apr", "Apr", 
                             "Apr", "Apr", "Apr", "Apr", "Apr", "Apr", "Apr", "Aug", "Aug", 
                             "Aug", "Aug", "Aug", "Aug", "Aug", "Aug", "Aug", "Aug", "Aug", 
                             "Aug", "Aug", "Aug", "Aug", "Aug", "Aug", "Aug", "Aug", "Aug", 
                             "Aug", "Aug", "Aug", "Aug", "Aug", "Aug", "Aug", "Aug", "Aug", 
                             "Aug", "Aug", "Aug", "Dec", "Dec", "Dec", "Dec", "Dec", "Dec", 
                             "Dec", "Dec", "Dec", "Dec", "Dec", "Dec", "Dec", "Feb", "Feb", 
                             "Feb", "Feb", "Feb", "Feb", "Feb", "Feb", "Feb", "Feb", "Feb", 
                             "Feb", "Feb", "Jan", "Jan", "Jan", "Jan", "Jan", "Jan", "Jan", 
                             "Jan", "Jan", "Jan", "Jan", "Jan", "Jan", "Jul", "Jul", "Jul", 
                             "Jul", "Jul", "Jul", "Jul", "Jul", "Jul", "Jul", "Jul", "Jul", 
                             "Jul", "Jul", "Jul", "Jul", "Jul", "Jul", "Jul", "Jul", "Jul", 
                             "Jul", "Jul", "Jul", "Jul", "Jul", "Jul", "Jul", "Jul", "Jul", 
                             "Jul", "Jul", "Jun", "Jun", "Jun", "Jun", "Jun", "Jun", "Jun", 
                             "Jun", "Jun", "Jun", "Jun", "Jun", "Jun", "Jun", "Jun", "Jun", 
                             "Jun", "Jun", "Jun", "Jun", "Jun", "Jun", "Jun", "Jun", "Jun", 
                             "Jun", "Jun", "Jun", "Jun", "Jun", "Jun", "Jun", "Mar", "Mar", 
                             "Mar", "Mar", "Mar", "Mar", "Mar", "Mar", "Mar", "Mar", "Mar", 
                             "Mar", "Mar", "Mar", "Mar", "Mar", "Mar", "May", "May", "May", 
                             "May", "May", "May", "May", "May", "May", "May", "May", "May", 
                             "May", "May", "May", "May", "May", "May", "May", "May", "May", 
                             "May", "May", "May", "May", "May", "May", "May", "May", "May", 
                             "May", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", 
                             "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", 
                             "Nov", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", 
                             "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", 
                             "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", 
                             "Oct", "Oct", "Oct", "Oct", "Oct", "Sep", "Sep", "Sep", "Sep", 
                             "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", 
                             "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", 
                             "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", 
                             "Sep"), Year = c("1960", "1961", "1962", "1963", "1964", "1965", 
                                              "1966", "1967", "1968", "1969", "1970", "1971", "1972", "2002", 
                                              "2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010", 
                                              "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", 
                                              "2019", "1960", "1961", "1962", "1963", "1964", "1965", "1966", 
                                              "1967", "1968", "1969", "1970", "1971", "1972", "2001", "2002", 
                                              "2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010", 
                                              "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", 
                                              "2019", "1959", "1960", "1961", "1962", "1963", "1964", "1965", 
                                              "1966", "1967", "1968", "1969", "1970", "1971", "1960", "1961", 
                                              "1962", "1963", "1964", "1965", "1966", "1967", "1968", "1969", 
                                              "1970", "1971", "1972", "1960", "1961", "1962", "1963", "1964", 
                                              "1965", "1966", "1967", "1968", "1969", "1970", "1971", "1972", 
                                              "1960", "1961", "1962", "1963", "1964", "1965", "1966", "1967", 
                                              "1968", "1969", "1970", "1971", "1972", "2001", "2002", "2003", 
                                              "2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", 
                                              "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", 
                                              "1960", "1961", "1962", "1963", "1964", "1965", "1966", "1967", 
                                              "1968", "1969", "1970", "1971", "1972", "2001", "2002", "2003", 
                                              "2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", 
                                              "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", 
                                              "1960", "1961", "1962", "1963", "1964", "1965", "1966", "1967", 
                                              "1968", "1969", "1970", "1971", "1972", "2016", "2017", "2018", 
                                              "2019", "1960", "1961", "1962", "1963", "1964", "1965", "1966", 
                                              "1967", "1968", "1969", "1970", "1971", "1972", "2002", "2003", 
                                              "2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", 
                                              "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", 
                                              "1959", "1960", "1961", "1962", "1963", "1964", "1965", "1966", 
                                              "1967", "1968", "1969", "1970", "1971", "2005", "2015", "2016", 
                                              "2017", "2018", "1959", "1960", "1961", "1962", "1963", "1964", 
                                              "1965", "1966", "1967", "1968", "1969", "1970", "1971", "2001", 
                                              "2002", "2003", "2004", "2005", "2006", "2007", "2008", "2010", 
                                              "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", 
                                              "2019", "1960", "1961", "1962", "1963", "1964", "1965", "1966", 
                                              "1967", "1968", "1969", "1970", "1971", "1972", "2001", "2002", 
                                              "2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010", 
                                              "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", 
                                              "2019"), Value = 1:295), row.names = c(NA, -295L), class = "data.frame")

您可以 subset 一个特定的年份值,然后 merge :

year = 2018
data <- subset(df, Year == year, select = -Year)
names(data)[names(data) == 'Value'] <- year
merge(Summary, data, by = 'Month', all.x = TRUE)

#   Month Median 2018
#1    Apr   16.0   30
#2    Aug   47.5   62
#3    Dec   70.0   NA
#4    Feb   83.0   NA
#5    Jan   96.0   NA
#6    Jul  118.5  133
#7    Jun  150.5  165
#8    Mar  175.0  182
#9    May  199.0  213
#10   Nov  223.5  232
#11   Oct  248.0  262
#12   Sep  279.5  294

如果我们想在 plyr 中完成所有操作,请使用 plyr::join

plyr::join(Summary, subset(df, Year == 2018, select = -Year))
#    Month Median Value
#1    Apr   16.0    30
#2    Aug   47.5    62
#3    Dec   70.0    NA
#4    Feb   83.0    NA
#5    Jan   96.0    NA
#6    Jul  118.5   133
#7    Jun  150.5   165
#8    Mar  175.0   182
#9    May  199.0   213
#10   Nov  223.5   232
#11   Oct  248.0   262
#12   Sep  279.5   294

或者如果我们想在 ddply

内完成
plyr::ddply(df, ~ Month, summarise, Median = median(Value),
        `2018` = Value[Year == 2018][1])
#   Month Median 2018
#1    Apr   16.0   30
#2    Aug   47.5   62
#3    Dec   70.0   NA
#4    Feb   83.0   NA
#5    Jan   96.0   NA
#6    Jul  118.5  133
#7    Jun  150.5  165
#8    Mar  175.0  182
#9    May  199.0  213
#10   Nov  223.5  232
#11   Oct  248.0  262
#12   Sep  279.5  294