目录
R语言进行长宽数据的相互转换
宽数据转长数据
模拟数据

rm(list = ls())
options(stringsAsFactors = F)
library(tidyverse)
library(reshape)
set.seed(123)
group1 <- runif(20, 2, 5)
group2 <- runif(20, 4, 7)
group3 <- runif(20, 6, 9)
group4 <- runif(20, 8, 11)
dfwide <- data.frame(cluster = rep(c("cluster1","cluster2"), 10),group1,group2,group3,group4)
#转换为长数据
dflong <- melt(dfwide, id.vars = c("cluster"))##根据分组变为长数据
结果
长数据转宽数据
#先进行转换为宽数据
df_wide1 <- dflong%>%pivot_wider(names_from = variable,
values_from =value )
##然后对数据进行拆分
#?unnest 函数
df_wide2 <- df_wide1 %>% unnest(group1, group2, group3, group4)
dfwide1a <- dfwide[order(dfwide$cluster),]
rownames(dfwide1a) <- c(1:nrow(dfwide1a))
df_wide2 <- as.data.frame(df_wide2)
identical(dfwide1a,df_wide2)
[1] TRUE
先转宽:
在拆分:
然后dfwide1a <- dfwide[order(dfwide$cluster),] 调整原数据的顺序进行比较
长数据转宽数据2
#需要进行数据转换
library(reshape2)
cellper <- dcast(Cellratio,Var2~Var1, value.var = "Freq")
Use acast or dcast depending on whether you want vector/matrix/array output or data frame output. Data frames can have at most two dimensions.
dcast(chick_m, time ~ variable, mean) # average effect of time
dcast(chick_m, diet ~ variable, mean) # average effect of diet
acast(chick_m, diet ~ time, mean) # average effect of diet & time
本文介绍了如何使用R语言中的tidyverse包进行宽数据(如DataFrame)转为长数据(melt操作)以及长数据转回宽数据(pivot_wider和unnest)的过程,同时展示了dcast和acast函数在数据重塑中的应用。
676

被折叠的 条评论
为什么被折叠?



