如何重塑数据,headers 两行,使用 R 从宽到长
How to reshape the data, with headers in two rows, from wide to long using R
以下是我现在的数据集:
我想获取 R 代码以获得以下形状:
注意:我有20个站,有些站没有WD属性
此致,
艾哈迈德
您应该尝试查看 tidyverse
包中的 pivot_wider()
函数和文档。用例应与您在此处描述的完全匹配。
假设我们有以下两行数据 header:
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)
我会先将两列合并为一列,然后 melt/gather 最后分开
library(dplyr)
library(tidyr)
在这里插入你的 df
col.names <- c("人物", "类型", 尾巴(粘贴(t(df[1,]),t(df[2,]),sep=".") ,n=-2))
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"))
您可以尝试使用 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") ```
以下是我现在的数据集:
我想获取 R 代码以获得以下形状:
注意:我有20个站,有些站没有WD属性
此致,
艾哈迈德
您应该尝试查看 tidyverse
包中的 pivot_wider()
函数和文档。用例应与您在此处描述的完全匹配。
假设我们有以下两行数据 header:
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)
我会先将两列合并为一列,然后 melt/gather 最后分开
library(dplyr)
library(tidyr)
在这里插入你的 df
col.names <- c("人物", "类型", 尾巴(粘贴(t(df[1,]),t(df[2,]),sep=".") ,n=-2))
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"))
您可以尝试使用 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") ```