R 将一个月内排列在每列中的每日数据转换为时间序列
我有几年的每日流量数据,以固定宽度“.txt”格式提供,如下所示: 年份:1962年R 将一个月内排列在每列中的每日数据转换为时间序列,r,dplyr,R,Dplyr,我有几年的每日流量数据,以固定宽度“.txt”格式提供,如下所示: 年份:1962年 Mean daily discharge in m3/s ============================ Day Jan. Feb. Mar. Apr. May Jun. Jul. Aug. Sep. Oct. Nov.
Mean daily discharge in m3/s
============================
Day Jan. Feb. Mar. Apr. May Jun. Jul. Aug. Sep. Oct. Nov. Dec. Year
01 NA NA 169 205 458 472 975 2010 1310 755 307 214
02 NA NA 163 205 467 462 952 2590 1230 800 307 211
03 NA NA 160 198 410 415 946 2340 1220 687 303 211
04 NA NA 158 189 396 392 946 2200 1160 675 303 208
05 NA NA 195 180 365 467 1040 2090 1230 652 299 205
06 NA NA 231 192 335 508 1150 2030 1260 634 295 205
07 NA NA 202 195 311 566 1250 1970 1230 628 291 202
08 NA NA 198 192 291 640 1220 1860 1160 611 288 202
09 NA NA 195 195 284 813 1100 1800 1180 588 280 198
10 NA NA 192 192 273 981 1050 1690 1260 577 273 198
11 NA NA 192 195 269 1030 946 1570 1160 555 269 195
12 NA NA 189 189 265 1000 1100 1850 1110 539 265 192
13 NA NA 189 186 262 1050 1040 1830 1090 518 265 192
14 NA NA 186 198 269 1060 934 1790 1180 503 262 189
15 NA NA 192 205 280 1150 1300 1900 1120 492 258 186
16 NA NA 192 211 295 1170 1470 2080 1160 467 255 183
17 NA NA 192 205 315 877 1490 2140 1260 453 255 183
18 NA NA 192 208 311 807 3030 1990 1130 448 251 180
19 NA NA 192 214 284 774 1360 1940 1700 434 248 180
20 NA NA 189 238 277 915 1310 1880 1830 429 244 178
21 NA NA 189 238 303 1020 1240 1780 1640 415 241 175
22 NA NA 186 277 319 1200 1200 1420 1860 406 238 175
23 NA 160 183 269 323 1280 1120 1350 1940 392 234 172
24 NA 163 183 315 357 1360 1160 1340 1650 369 231 169
25 NA 178 186 361 365 1380 1260 1570 1420 357 227 169
26 NA 169 189 361 365 1340 1360 1730 1220 344 224 169
27 NA 169 189 410 365 1300 1810 1880 1130 335 221 166
28 NA 169 192 434 387 1250 2090 1640 1040 327 218 166
29 NA 195 419 419 1210 1800 1550 981 311 218 163
30 NA 202 387 415 1150 1800 1500 969 311 214 163
31 NA 205 438 1850 1690 307 163
Min NA NA 158 180 262 392 934 1340 969 307 214 163 NA
Mean NA NA 189 249 338 936 1330 1840 1290 494 259 186 NA
Max NA NA 231 434 467 1380 3030 2590 1940 800 307 214 NA
我的目标是将其转换为时间序列。我尝试使用read.fwf()读取文件,并使用pivot_longer()函数获取时间序列。但问题是我无法指定每个月的天数,因此得到了372天。因为我是r的新手,所以我不熟悉很多r软件包。这里有人能提出一个更简单的方法来实现我的目标吗?谢谢大家! 如果您的数据存储在
test.dat
中,您可以尝试:
library(tidyverse)
df <- read_table("test.dat") %>%
pivot_longer(Jan.:Dec., values_drop = T) %>%
mutate(name = str_remove(name, "[.]")) %>%
mutate(Year = "1962") %>%
mutate(date = dmy(paste(Day, name, Year, sep = "/")))
库(tidyverse)
df%
枢轴长度(1月:12月,数值下降=T)%>%
突变(name=str_remove(name,“[.””)%>%
变异(Year=“1962”)%>%
突变(日期=dmy(粘贴(日期、名称、年份、九月=”))
像这样做
df <- read.table(text = "Day Jan. Feb. Mar. Apr. May. Jun. Jul. Aug. Sep. Oct. Nov. Dec.
01 NA NA 169 205 458 472 975 2010 1310 755 307 214
02 NA NA 163 205 467 462 952 2590 1230 800 307 211
03 NA NA 160 198 410 415 946 2340 1220 687 303 211
04 NA NA 158 189 396 392 946 2200 1160 675 303 208
05 NA NA 195 180 365 467 1040 2090 1230 652 299 205
06 NA NA 231 192 335 508 1150 2030 1260 634 295 205
07 NA NA 202 195 311 566 1250 1970 1230 628 291 202
08 NA NA 198 192 291 640 1220 1860 1160 611 288 202
09 NA NA 195 195 284 813 1100 1800 1180 588 280 198
10 NA NA 192 192 273 981 1050 1690 1260 577 273 198
11 NA NA 192 195 269 1030 946 1570 1160 555 269 195
12 NA NA 189 189 265 1000 1100 1850 1110 539 265 192
13 NA NA 189 186 262 1050 1040 1830 1090 518 265 192
14 NA NA 186 198 269 1060 934 1790 1180 503 262 189
15 NA NA 192 205 280 1150 1300 1900 1120 492 258 186
16 NA NA 192 211 295 1170 1470 2080 1160 467 255 183
17 NA NA 192 205 315 877 1490 2140 1260 453 255 183
18 NA NA 192 208 311 807 3030 1990 1130 448 251 180
19 NA NA 192 214 284 774 1360 1940 1700 434 248 180
20 NA NA 189 238 277 915 1310 1880 1830 429 244 178
21 NA NA 189 238 303 1020 1240 1780 1640 415 241 175
22 NA NA 186 277 319 1200 1200 1420 1860 406 238 175
23 NA 160 183 269 323 1280 1120 1350 1940 392 234 172
24 NA 163 183 315 357 1360 1160 1340 1650 369 231 169
25 NA 178 186 361 365 1380 1260 1570 1420 357 227 169
26 NA 169 189 361 365 1340 1360 1730 1220 344 224 169
27 NA 169 189 410 365 1300 1810 1880 1130 335 221 166
28 NA 169 192 434 387 1250 2090 1640 1040 327 218 166
29 NA NA 195 419 419 1210 1800 1550 981 311 218 163
30 NA NA 202 387 415 1150 1800 1500 969 311 214 163
31 NA NA 205 NA 438 NA 1850 1690 NA 307 NA 163
", header = T)
df %>% pivot_longer(!Day, values_drop_na = T) %>%
mutate(date = as.Date(paste0('2017','.', name, Day ), format = '%Y.%b.%d')) %>%
select(-Day, name) %>%
complete(date = seq.Date(as.Date('2017-01-01'), as.Date('2017-12-31'), by = '1 day'))
# A tibble: 365 x 3
date name value
<date> <chr> <int>
1 2017-01-01 NA NA
2 2017-01-02 NA NA
3 2017-01-03 NA NA
4 2017-01-04 NA NA
5 2017-01-05 NA NA
6 2017-01-06 NA NA
7 2017-01-07 NA NA
8 2017-01-08 NA NA
9 2017-01-09 NA NA
10 2017-01-10 NA NA
# ... with 355 more rows
df%pivot\u更长(!天,值下降\u na=T)%>%
变异(日期=as.date(粘贴0('2017','name,Day),格式='%Y.%b.%d'))%>%
选择(-Day,name)%>%
完成(日期=序号日期(截止日期('2017-01-01')、截止日期('2017-12-31')、截止日期='1天'))
#一个tibble:365 x 3
日期名称值
2017年1月1日不适用
2 2017-01-02不适用
3 2017-01-03不适用
4 2017-01-04不适用
5 2017-01-05不适用
6 2017-01-06不适用
7 2017-01-07不适用
8 2017-01-08不适用
9 2017-01-09不适用
10 2017-01-10不适用
# ... 还有355行
Usevalues\u drop=T
inpivot\u longer
@ANilGoyal Yah values\u drop=T可以工作,但是它会忽略数据集中所有我不想忽略的可用NAs。这不是问题。之后可以使用tidyr::complete