R 在长格式数据帧中使用不带列名的melt将宽格式转换为长格式
我有一个像这样的数据框 我想把数据帧转换成这样的长格式 这是我使用的代码R 在长格式数据帧中使用不带列名的melt将宽格式转换为长格式,r,tidyr,melt,R,Tidyr,Melt,我有一个像这样的数据框 我想把数据帧转换成这样的长格式 这是我使用的代码 long_ex <- melt(wide_ex, id.vars = 5, na.rm=TRUE) #wide_ex is wide format dataframe 如果您想要基本的R解决方案: data.frame(name_1 = rep(as.character(wide_ex$Column5), each=nrow(wide_ex)), name_2 = as.vector(t(wide_ex[
long_ex <- melt(wide_ex, id.vars = 5, na.rm=TRUE) #wide_ex is wide format dataframe
如果您想要基本的R解决方案:
data.frame(name_1 = rep(as.character(wide_ex$Column5), each=nrow(wide_ex)),
name_2 = as.vector(t(wide_ex[, c("Column7", "Column8", "Column9", "Column10")])))
我仍然认为最简洁的方法是数据融合。表:
library(data.table)
setDT(wide_ex)
melt(wide_ex, id.vars = c("Column5"), na.rm=TRUE)[,variable := NULL][]
如果速度值得关注的话,它还将提供相当大的速度改善
(补充说明)附加的
[]
有什么用?
A) 在数据表中使用额外的[]称为链接。它允许您在前面的[]上执行更多操作
正如您最初指出的,melt的输出会产生一个不需要的列(变量
)<代码>变量:=NULL
将其删除。这基本上与(针对您的原始问题)执行以下操作相同:
long\u ex如果您想要基本R解决方案:
data.frame(name_1 = rep(as.character(wide_ex$Column5), each=nrow(wide_ex)),
name_2 = as.vector(t(wide_ex[, c("Column7", "Column8", "Column9", "Column10")])))
我仍然认为最简洁的方法是数据融合。表:
library(data.table)
setDT(wide_ex)
melt(wide_ex, id.vars = c("Column5"), na.rm=TRUE)[,variable := NULL][]
如果速度值得关注的话,它还将提供相当大的速度改善
(补充说明)附加的[]
有什么用?
A) 在数据表中使用额外的[]称为链接。它允许您在前面的[]上执行更多操作
正如您最初指出的,melt的输出会产生一个不需要的列(变量
)<代码>变量:=NULL
将其删除。这基本上与(针对您的原始问题)执行以下操作相同:
long_ex同样使用melt
进行tidyverse
方法
library(tidyverse)
library(data.table)
df %>%
melt(id.vars=5) %>%
filter(complete.cases(.)) %>%
select(c(1,3))
Column5 value
1 Jim Eric
2 Eric Mary
3 Tim Erica
4 Matt Mary
5 Jim Matt
6 Eric Loranda
7 Tim Beth
8 Matt Matt
9 Jim Heather
10 Eric Patrick
11 Tim Courtney
12 Matt Patrick
13 Jim Loranda
14 Eric John
15 Tim Heather
16 Matt Beth
同样,使用melt
进行tidyverse
方法
library(tidyverse)
library(data.table)
df %>%
melt(id.vars=5) %>%
filter(complete.cases(.)) %>%
select(c(1,3))
Column5 value
1 Jim Eric
2 Eric Mary
3 Tim Erica
4 Matt Mary
5 Jim Matt
6 Eric Loranda
7 Tim Beth
8 Matt Matt
9 Jim Heather
10 Eric Patrick
11 Tim Courtney
12 Matt Patrick
13 Jim Loranda
14 Eric John
15 Tim Heather
16 Matt Beth
为什么以后不能删除“列”?不管怎样,你能用dput
分享你的数据吗?@markus我知道这是一个非常简单的解决方案,但我很好奇我自己的启发的替代方法。为什么你不能在事后删除“列”?不管怎样,你能用dput
分享你的数据吗?@markus我知道这是一个非常简单的解决方案,但我很好奇我自己的教诲的替代方法效果很好。您能解释一下[,variable:=NULL][]
的作用吗?请参阅更新的答案。如果有不清楚的地方,请告诉我。效果很好。您能解释一下[,variable:=NULL][]
的作用吗?请参阅更新的答案。如果有什么不清楚的地方,请告诉我。