R 将特定的重复列数据转换为给定ID的行

R 将特定的重复列数据转换为给定ID的行,r,dataframe,rows,transpose,R,Dataframe,Rows,Transpose,我有一个数据框,它由第一列中的ID和给定ID的多个事务组成。例如: ID Transaction 1111 $13 1111 $55 1111 $4 1112 $27 1112 $40 1113 $12 1114 $100 1114 $60 1114 $55 ID Transaction1 Transaction2 Transaction3 1111 $13 $55 $4 1112

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

ID  Transaction
1111   $13
1111   $55
1111   $4
1112   $27
1112   $40
1113   $12
1114   $100
1114   $60
1114   $55
ID  Transaction1  Transaction2  Transaction3
1111         $13           $55            $4
1112         $27           $40
1113         $12
1114        $100           $60           $55
我试图做的是只使用一行客户ID,然后为每个实例创建多个事务。例如:

ID  Transaction
1111   $13
1111   $55
1111   $4
1112   $27
1112   $40
1113   $12
1114   $100
1114   $60
1114   $55
ID  Transaction1  Transaction2  Transaction3
1111         $13           $55            $4
1112         $27           $40
1113         $12
1114        $100           $60           $55
任何帮助都将不胜感激。我一直在尝试使用for循环之类的工具,但我一直在工作中迷失方向,一直在寻找一种更简单的方法来实现这一点。

使用data.table:

在哪里

使用data.table:

在哪里

整洁的方法

样本数据 整洁的方法

样本数据
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 $13          $55          $4
#2  1112 $27          $40          NA
#3  1113 $12          NA           NA
#4  1114 $100         $60          $55
df <- read.table(text =
    "ID  Transaction
1111   $13
1111   $55
1111   $4
1112   $27
1112   $40
1113   $12
1114   $100
1114   $60
1114   $55", header = T)
library(plyr)
library(reshape2)
x <- read.table(header = TRUE, text = "
           ID  Transaction
           1111   $13
           1111   $55
           1111   $4
           1112   $27
           1112   $40
           1113   $12
           1114   $100
           1114   $60
           1114   $55
           ")

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


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