将特定的重复列数据转置为给定 ID 的行 #

Transposing specific duplicated column data into rows given ID #

我有一个数据框,它由第一列中的 ID # 和该给定 ID 的多个事务组成。例如:

ID  Transaction
1111   
1111   
1111   
1112   
1112   
1113   
1114   0
1114   
1114   

我想做的是只有一行客户 ID,然后为每个实例创建多个事务。例如:

ID  Transaction1  Transaction2  Transaction3
1111                                
1112                    
1113         
1114        0                      

如有任何帮助,我们将不胜感激。我一直在尝试使用 for 循环等等,但我一直在工作中迷失方向,一直在寻找一种更简单的方法来做到这一点。

使用data.table:

library(data.table)
dcast(data, ID ~ paste0("Transaction", rowid(ID)), value.var = "Transaction")


     ID Transaction1 Transaction2 Transaction3
1: 1111                               
2: 1112                             <NA>
3: 1113                   <NA>         <NA>
4: 1114         0                    

在哪里

data <- fread("ID  Transaction
1111   
1111   
1111   
1112   
1112   
1113   
1114   0
1114   
1114   ")

一种tidyverse方法

library(tidyverse)
df %>%
    group_by(ID) %>%
    mutate(n = paste0("Transaction", 1:n())) %>%
    spread(n, Transaction)
#    ID Transaction1 Transaction2 Transaction3
# <int> <fct>        <fct>        <fct>
#1  1111                     
#2  1112                     NA
#3  1113           NA           NA
#4  1114 0                   

示例数据

df <- read.table(text =
    "ID  Transaction
1111   
1111   
1111   
1112   
1112   
1113   
1114   0
1114   
1114   ", header = T)
library(plyr)
library(reshape2)
x <- read.table(header = TRUE, text = "
           ID  Transaction
           1111   
           1111   
           1111   
           1112   
           1112   
           1113   
           1114   0
           1114   
           1114   
           ")

x<- ddply(x, "ID", transform, 
      castTransaction = paste0("Transaction", seq(length(Transaction))))


dcast(ID ~ castTransaction, value.var = "Transaction", data = x)