0

I have tried to transform this data but I am quite new to R and would like some help on the below.

I used this code and it transforms the whole data.

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

Any help would be really appreciated.

I have this original dataset that I want to transform:

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

The transformed data should look like this:

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
NJ1
  • 5
  • 2

1 Answers1

0

You can try this:

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")

Result:

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
Leonardo
  • 2,439
  • 33
  • 17
  • 31
  • Thank you so much. What if I have days until 31 Dec will I have to type in all those days? – NJ1 Nov 13 '21 at 10:02
  • What solves the problem is the command ```df %>% pivot_longer (cols = `01-Jan`:` 05-Jan`, names_to = "day", values_to = "rain")```. I put the definition of the `df` to have a reproducible example. So what you need to do is ```df %>% pivot_longer (cols = `01-Jan`:` 31-Dec`, names_to = "day", values_to = "rain")```. If the answer was helpful to you, please consider to upvote and accept it. – Leonardo Nov 13 '21 at 10:06