我有一个数据框,该数据框由第一列中的ID#和该给定ID的多个事务组成。例如:
ID Transaction
1111 $13
1111 $55
1111 $4
1112 $27
1112 $40
1113 $12
1114 $100
1114 $60
1114 $55
我想要做的是仅获得一行客户ID,然后为每个实例创建多个事务。例如:
ID Transaction1 Transaction2 Transaction3
1111 $13 $55 $4
1112 $27 $40
1113 $12
1114 $100 $60 $55
任何帮助将不胜感激。我一直在尝试使用循环,而不是使用循环,但是我一直迷失在工作中,并一直在寻找一种更简单的方法来实现此目的。
答案 0 :(得分:3)
使用data.table
:
library(data.table)
dcast(data, ID ~ paste0("Transaction", rowid(ID)), value.var = "Transaction")
ID Transaction1 Transaction2 Transaction3
1: 1111 $13 $55 $4
2: 1112 $27 $40 <NA>
3: 1113 $12 <NA> <NA>
4: 1114 $100 $60 $55
哪里
data <- fread("ID Transaction
1111 $13
1111 $55
1111 $4
1112 $27
1112 $40
1113 $12
1114 $100
1114 $60
1114 $55")
答案 1 :(得分:3)
一种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 $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)
答案 2 :(得分:0)
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)