如何在 R 中转换这些数据?

How can I transform this data in R?

我尝试过转换这些数据,但我对 R 还很陌生,希望在下面得到一些帮助。

我使用了这段代码,它转换了整个数据。

attach(merged_file) 
final_df <- as.data.frame(t(merged_file))

任何帮助将不胜感激。

我有这个要转换的原始数据集:

Year    AEZ 01-Jan  02-Jan  03-Jan  04-Jan  05-Jan
1981    1   0.025   0.025   0.025   0.025   0.025
1981    2   0.0049  0.0049  0.0049  0.0049  0.0049
1982    1   0.0251  0.0251  0.0251  0.0251  0.0251
1982    2   0.0049  0.0049  0.0049  0.0049  0.0049

转换后的数据应如下所示:

aez year    day rainfall
1   1981    01-Jan  0.025
1   1981    02-Jan  0.025
1   1981    03-Jan  0.025
1   1981    04-Jan  0.025
1   1981    05-Jan  0.025
2   1981    01-Jan  0.0049
2   1981    02-Jan  0.0049
2   1981    03-Jan  0.0049
2   1981    04-Jan  0.0049
2   1982    05-Jan  0.0049
1   1982    01-Jan  0.0251
1   1982    02-Jan  0.0251
1   1982    03-Jan  0.0251
1   1982    04-Jan  0.0251
1   1982    05-Jan  0.0251
2   1982    01-Jan  0.0049
2   1982    02-Jan  0.0049
2   1982    03-Jan  0.0049
2   1982    04-Jan  0.0049
2   1982    05-Jan  0.0049

你可以试试这个:

library(dplyr)

df <- tribble(
  ~Year, ~AEZ, ~`01-Jan`, ~`02-Jan`, ~`03-Jan`, ~`04-Jan`, ~`05-Jan`,
  1981,    1,   0.025,   0.025,   0.025,   0.025,   0.025,
  1981,    2,   0.0049,  0.0049,  0.0049,  0.0049,  0.0049,
  1982,    1,   0.0251,  0.0251,  0.0251,  0.0251,  0.0251,
  1982,    2,   0.0049,  0.0049,  0.0049,  0.0049,  0.0049
)

df %>% 
  pivot_longer(cols=`01-Jan`:`05-Jan`, names_to = "day", values_to = "rainfall")

结果:

A tibble: 20 × 4
    Year   AEZ day    rainfall
   <dbl> <dbl> <chr>     <dbl>
 1  1981     1 01-Jan   0.025 
 2  1981     1 02-Jan   0.025 
 3  1981     1 03-Jan   0.025 
 4  1981     1 04-Jan   0.025 
 5  1981     1 05-Jan   0.025 
 6  1981     2 01-Jan   0.0049
 7  1981     2 02-Jan   0.0049
 8  1981     2 03-Jan   0.0049
 9  1981     2 04-Jan   0.0049
10  1981     2 05-Jan   0.0049
11  1982     1 01-Jan   0.0251
12  1982     1 02-Jan   0.0251
13  1982     1 03-Jan   0.0251
14  1982     1 04-Jan   0.0251
15  1982     1 05-Jan   0.0251
16  1982     2 01-Jan   0.0049
17  1982     2 02-Jan   0.0049
18  1982     2 03-Jan   0.0049
19  1982     2 04-Jan   0.0049
20  1982     2 05-Jan   0.0049