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