【问题标题】:How can I transform this data in R? [duplicate]如何在 R 中转换这些数据? [复制]
【发布时间】:2021-12-25 09:41:19
【问题描述】:

我试图转换这些数据,但我对 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

【问题讨论】:

  • 这是我尝试过的,但它没有给我我需要的东西。 attach(merged_file) final_df
  • 能否将其添加到您的问题中,好吗?

标签: r dataframe date transform transpose


【解决方案1】:

你可以试试这个:

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

【讨论】:

  • 非常感谢。如果我在 12 月 31 日之前还有几天必须输入这些日子怎么办?
  • 解决问题的是命令df %&gt;% pivot_longer (cols = `01-Jan`:` 05-Jan`, names_to = "day", values_to = "rain")。我把df 的定义放了一个可重现的例子。所以你需要做的是df %&gt;% pivot_longer (cols = `01-Jan`:` 31-Dec`, names_to = "day", values_to = "rain")。如果回答对您有帮助,请考虑点赞并采纳。
猜你喜欢
  • 2021-04-12
  • 2016-04-29
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2018-07-12
  • 1970-01-01
相关资源
最近更新 更多