簡體   English   中英

將列名稱轉換為R中的行

[英]Converting Column names to row in R

我有一個看起來像這樣的數據框

v1 <- c(1,2,3,4,5,6)
v2 <- c(2,3,4,3,5,1)
group <- c("A","B","C","D","E","G")

df1 <- data.frame(v1,v2,group)

v1  v2  group
1   2    A
2   3    B
3   4    C
4   3    D
5   5    E
6   1    G

我想將其轉換為如下形式:

v   sale    group
v1     2    A
v1     3    B
v1     4    C
v1     3    D
v1     5    E
v1     1    G
v2     1    A
v2     2    B
v2     3    C
v2     4    D
v2     5    E
v2     6    G

看來這是一種反向重塑,但我不確定該使用什么

提前致謝。

提迪爾的另一個選擇:

library(tidyr)

gather(df1, v, Sale, v1:v2)

#   group     v Sale
#1      A    v1    1
#2      B    v1    2
#3      C    v1    3
#4      D    v1    4
#5      E    v1    5
#6      G    v1    6
#7      A    v2    2
#8      B    v2    3
#9      C    v2    4
#10     D    v2    3
#11     E    v2    5
#12     G    v2    1
library(reshape)
v1 <- c(1,2,3,4,5,6)
v2 <- c(2,3,4,3,5,1)
group <- c("A","B","C","D","E","G")
df1 <- data.frame(v1,v2,group)
melt(df1)

   group variable value
1      A       v1     1
2      B       v1     2
3      C       v1     3
4      D       v1     4
5      E       v1     5
6      G       v1     6
7      A       v2     2
8      B       v2     3
9      C       v2     4
10     D       v2     3
11     E       v2     5
12     G       v2     1

您也可以使用base R stack

 cbind(setNames(stack(df1[,-3]),c('sale','v')), group=df1$group)
 #    sale  v group
 #1     1 v1     A
 #2     2 v1     B
 #3     3 v1     C
 #4     4 v1     D
 #5     5 v1     E
 #6     6 v1     G
 #7     2 v2     A
 #8     3 v2     B
 #9     4 v2     C
 #10    3 v2     D
 #11    5 v2     E
 #12    1 v2     G

無需外部包裝即可完成此操作。

do.call(rbind,apply(df1,1,function(x){data.frame(v=names(x)[1:2],sale=unlist(x[1:2]),group=x[3])}))
  • 該函數將原始數據框的一行重寫為具有所需結構的新數據框。
  • 應用程序將建立這些新數據框的列表,並
  • do.call將這些多個數據框合並為一個新的數據框。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM