【问题标题】:Transposing a data frame [duplicate]转置数据框[重复]
【发布时间】:2023-03-09 17:05:01
【问题描述】:

我有一个关于将数据框重新塑造(如果这是正确的词)到它的转置版本的问题。我想采取类似的东西:

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

并将其转换为如下数据框:

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 中是否有一些我不知道的首选函数,或者我应该循环这个过程? 谢谢!

【问题讨论】:

  • 您好,欢迎来到堆栈溢出。您正在寻找的问题可能与以下问题类似:stackoverflow.com/questions/15668870/… 这个问题的一些有用的搜索词是[r] [reshape] [reshape2] [plyr]

标签: r plyr reshape2


【解决方案1】:
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)

首先创建一个索引变量:

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 并转换为宽格式:

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

【讨论】:

    猜你喜欢
    • 2019-04-09
    • 2019-09-09
    • 2018-07-23
    • 2019-02-12
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多