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][]
的作用吗?请参阅更新的答案。如果有什么不清楚的地方,请告诉我。