将具有相同键的数据合并到一行

时间:2016-09-02 07:25:03

标签: r dataframe merge

我有一个包含多个数据的数据框

Key     A B C
1       1 2 3
1       4 6 8
1       3 2 1

我需要将这些数据与相同的密钥合并为一行,就像这样

Key      A1 B1 C1 A2 B2 C2 A3 B3 C3
1        1  2  3  4  6  8  3  2  1 

有没有简单的方法来获得我需要的结果。

1 个答案:

答案 0 :(得分:-1)

如果这只是一组'密钥',则一个选项是使用base R。我们转置(t)除第一列(df[-1])之外的数据集,连接到vector,转换为data.frmecbind第一个元素第一栏。

res <- cbind(df1[1,1], as.data.frame.list(c(t(df1[-1]))))
names(res) <- c(names(df1)[1] ,make.unique(rep(names(df1)[-1],3)))
res
#  Key A B C A.1 B.1 C.1 A.2 B.2 C.2
#1   1 1 2 3   4   6   8   3   2   1

如果有很多关键词,请使用data.table即开发版v1.9.7。元素

library(data.table)
dcast(setDT(df1), Key~rowid(Key), value.var = c("A", "B", "C"),sep="")
#   Key A1 A2 A3 B1 B2 B3 C1 C2 C3
#1:   1  1  4  3  2  6  2  3  8  1

如果我们有data.table版本&lt; v1.9.7,我们需要创建按&#39; Key&#39;

分组的序列列
dcast(setDT(df1)[, rn := 1:.N , Key], Key ~rn, value.var = c("A", "B", "C"),sep="")
#   Key A1 A2 A3 B1 B2 B3 C1 C2 C3
#1:   1  1  4  3  2  6  2  3  8  1