使用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