我正面临着以下问题。我使用特拉华州大学的气温数据(可以在这里找到@http://climate.geog.udel.edu/~climate/html_pages/download.html-在以下标题地面气温下:1900-2017网格化月度时间序列(V 5.01))。它以固定宽度格式提供年度数据,文件命名约定如下:air_temp.1900,air_temp.1901 air_temp.1902...... air_temp.2017.
从这些数据中,我使用以下代码提取数据作为 Dataframe ,制作2005- 15年的数据列表。
#list all files in the folder
p <- paste0("air_temp", sep= ".", 2005:2015)
#make a function to extract data from Uni_Del files
read_udel = function(p){
d = read.fwf(p, widths=rep(8,15))
names(d) = c("long","lat",month.abb,"mean")
return(d)
}
#Make a list of that contains all data
read.all = lapply(p, read_udel)
每年的数据以以下格式发布:
lat | long | jan | feb| ........Dec| Mean
现在我想使用lat和long作为ID变量将每年的数据转换为long格式。但我面临的两个问题如下:
1.在所有年份的数据框中缺少年份的列,我无法弄清楚如何将其添加到对应于该年份观测的每个数据框中。
1.我不知道如何迭代列表中包含的所有数据框,以便一次性将每年的数据从宽更改为长(而无需逐个单独执行)
我需要以下格式的每年数据:
lat | long | year| month | air_temp
x y 1900 Jan ..... (some value)
x y 1900 Feb .....
x y 1900 March .....
有没有人能帮我这个忙?非常感谢!!
1条答案
按热度按时间uyto3xhc1#
要创建年份列,我建议您修改自定义函数:
我不能尝试它,请让我知道如果它的工作
为了将列表中的所有 Dataframe 从宽到长进行更改,我可以想象一种
lapply
与您最喜欢的整形函数相结合?(例如dplyr::pivot_longer
等)。