使用dplyr/tidyr在R数据帧中将行转换为列

使用dplyr/tidyr在R数据帧中将行转换为列,r,dataframe,dplyr,tidyr,R,Dataframe,Dplyr,Tidyr,我有这样一个数据框: year <-c(floor(runif(100,min=2015, max=2017))) month <- c(floor(runif(100, min=1, max=13))) inch <- c(floor(runif(100, min=0, max=10))) mm <- c(floor(runif(100, min=0, max=100))) df = data.frame(year, month, inch, mm); year mo

我有这样一个数据框:

year <-c(floor(runif(100,min=2015, max=2017)))
month <- c(floor(runif(100, min=1, max=13)))
inch <- c(floor(runif(100, min=0, max=10)))
mm <- c(floor(runif(100, min=0, max=100)))
df = data.frame(year, month, inch, mm);

year month inch mm
2016    11    0 10
2015     9    3 34
2016     6    3 33
2015     8    0 77
因此,需要发生两件事。 (1) 该月需要成为该月前三个字母的字符串。 (2) 我需要按年份分组,然后将
mm
值放在该年份下的一列中

到目前为止,我有这个代码,但我无法理解:

df %>% 
  select(-inch) %>% 
  group_by(month) %>% 
  summarize(mm = mm) %>% 
  ungroup()

要将月份转换为名称,您可以参考
month.abb
;然后,您可以按年份和月份进行汇总,
扩展为宽幅格式:

library(dplyr)
library(tidyr)
df %>% 
   group_by(year, month = month.abb[month]) %>% 
   summarise(mm = mean(mm)) %>%    # use mean as an example, could also be sum or other 
                                   # intended aggregation methods
   spread(year, mm) %>% 
   arrange(match(month, month.abb))  # rearrange month in chronological order

# A tibble: 12 x 3
#   month   `2015`   `2016`
#   <chr>    <dbl>    <dbl>
# 1   Jan 65.50000 28.14286
# 2   Feb 54.40000 30.00000
# 3   Mar 23.50000 95.00000
# 4   Apr  7.00000 43.60000
# 5   May 45.33333 44.50000
# 6   Jun 70.33333 63.16667
# 7   Jul 72.83333 52.00000
# 8   Aug 53.66667 66.50000
# 9   Sep 51.00000 64.40000
#10   Oct 74.00000 39.66667
#11   Nov 66.20000 58.71429
#12   Dec 38.25000 51.50000
库(dplyr)
图书馆(tidyr)
df%>%
分组依据(年、月=月。abb[月])%>%
总结(mm=平均值(mm))%>%#以平均值为例,也可以是总和或其他
#预期聚合方法
价差(年,毫米)%>%
安排(匹配(month,month.abb)#按时间顺序重新安排月份
#一个tibble:12x3
#2015年至2016年`
#           
#1986年1月1日65.50000 28.14286
#2月2日54.40000 30.00000
#3月3日23.50000 95.00000
#4月7日0000043.60000
#5月5日45.33333 44.50000
#六月六日70.33333 63.16667
#7月7日72.83333 52.00000
#8月8日53.66667 66.50000
#9月9日51.0000064.40000
#10月10日74.00000 39.66667
#11月11日66.20000 58.71429
#12月38日2500051.50000

太棒了!那么如何将输出保存为csv?使用
write.csv
。链
%%>%write.csv('test.csv')
在上述转换后应该可以工作。在基本R中,它是
xtabs(mm~月+年,数据=df)
library(dplyr)
library(tidyr)
df %>% 
   group_by(year, month = month.abb[month]) %>% 
   summarise(mm = mean(mm)) %>%    # use mean as an example, could also be sum or other 
                                   # intended aggregation methods
   spread(year, mm) %>% 
   arrange(match(month, month.abb))  # rearrange month in chronological order

# A tibble: 12 x 3
#   month   `2015`   `2016`
#   <chr>    <dbl>    <dbl>
# 1   Jan 65.50000 28.14286
# 2   Feb 54.40000 30.00000
# 3   Mar 23.50000 95.00000
# 4   Apr  7.00000 43.60000
# 5   May 45.33333 44.50000
# 6   Jun 70.33333 63.16667
# 7   Jul 72.83333 52.00000
# 8   Aug 53.66667 66.50000
# 9   Sep 51.00000 64.40000
#10   Oct 74.00000 39.66667
#11   Nov 66.20000 58.71429
#12   Dec 38.25000 51.50000