【问题标题】:How to reshape the data, with headers in two rows, from wide to long using R如何使用R从宽到长重塑数据,两行标题
【发布时间】:2021-06-24 22:36:33
【问题描述】:

以下数据集是我现在拥有的:

我想获取 R 代码以获得以下形状:

注意:我有20个电台,有些电台没有WD属性。

问候,

艾哈迈德

【问题讨论】:

  • This 回答你的问题了吗?

标签: r dataframe reshape


【解决方案1】:

你可以尝试使用 reshape2 包


Df_long <- melt(df, id.vars=c("Date", "Time"), measure.vars=c("TEMPERAT","RH","WS","WD","SOL_RAD","UV A","UV B"), variable.name="Values",value.name="Station") ```

【讨论】:

  • 请将您的代码放在两个 ```(三个反引号)之间,一个在开头,一个在结尾,以提高可读性。
【解决方案2】:

假设我们有以下带有两行标题的数据:

c1 <- c('','','Alice','Alice','Bob','Bob')
c2 <- c('','','Cold','Flu','Cold','Flu')
c3 <- c('2014','Fall','X','','','X')
c4 <- c('2014','Winter','','X','','')
c5 <- c('2015','Fall','X','X','','X')
c6 <- c('2015','Winter','','','X','')
df <- data.frame(c1,c2,c3,c4,c5,c6)

我会先将两列合二为一,然后融化/聚集,最后分开

library(dplyr) 
library(tidyr)

在此处插入您的 df

col.names

df <- df[-c(1,2),]

df <- setNames(df,col.names)

df %>%
  gather(Season, Value, -Person, -Type) %>%
  mutate(Season = as.character(Season)) %>%
  separate(Season,c("Year","Season"))

【讨论】:

    【解决方案3】:

    您应该尝试从tidyverse 包中查看pivot_wider() 函数和文档。用例应与您在此处描述的完全匹配。

    【讨论】:

    • 我有两级表头,如何指定代码来理解第一行和第二行?
    • 嗯,这更复杂 - 我认为您可能必须将它们组合起来,然后再将它们分开。 IE。用“Station1Temperat”,Station1RH“等组成一个标题行,并将其用作新的标题行。然后你可以使用正则表达式选项来识别哪些列是Station 1或2并稍后分开。我会让你知道我是否想到了一个更优雅的解决方案。
    猜你喜欢
    • 2017-11-04
    • 2016-05-25
    • 2016-03-20
    • 1970-01-01
    • 2015-02-03
    • 2012-03-25
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    相关资源
    最近更新 更多