转置数据帧 [英] Transposing a data frame
本文介绍了转置数据帧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个问题,关于将数据帧重塑(如果正确的话)到它的转置版本.我想像这样:
I have a question about re-shaping (if that's the right word) a data frame to a transposed version of it. I want to take something like:
A B C
1 6 1
1 18 1
1 21 1
3 18 1
3 21 1
4 6 1
4 18 1
4 20 1
4 21 1
并将其转换为如下数据框:
And turn it into a dataframe like:
A B_1 C_1 B_2 C_2 B_3 C_3 ...
1 6 1 18 1 21 1
3 18 1 21 1
4 6 1 18 1 20 1 21 1
R中是否有我不知道的go-to函数,还是应该遍历此过程? 谢谢!
Is there some go-to function in R that I'm unaware of or should I loop over this process? Thanks!
推荐答案
DF <- read.table(text="A B C
1 6 1
1 18 1
1 21 1
3 18 1
3 21 1
4 6 1
4 18 1
4 20 1
4 21 1",header=TRUE)
首先创建一个索引变量:
First create an index variable:
library(plyr)
DF <- ddply(DF,.(A),transform,No=seq_along(A))
# A B C No
# 1 1 6 1 1
# 2 1 18 1 2
# 3 1 21 1 3
# 4 3 18 1 1
# 5 3 21 1 2
# 6 4 6 1 1
# 7 4 18 1 2
# 8 4 20 1 3
# 9 4 21 1 4
现在将data.frame融化并转换为宽格式:
Now melt the data.frame and cast to wide format:
library(reshape2)
DF <- melt(DF,id.vars=c("A","No"))
res <- dcast(DF,A~No+variable)
# A 1_B 1_C 2_B 2_C 3_B 3_C 4_B 4_C
# 1 1 6 1 18 1 21 1 NA NA
# 2 3 18 1 21 1 NA NA NA NA
# 3 4 6 1 18 1 20 1 21 1
公式中的顺序很重要:
res <- dcast(DF,A~variable+No)
# A B_1 B_2 B_3 B_4 C_1 C_2 C_3 C_4
# 1 1 6 18 21 NA 1 1 1 NA
# 2 3 18 21 NA NA 1 1 NA NA
# 3 4 6 18 20 21 1 1 1 1
这篇关于转置数据帧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文