将特定的重复列数据转置为给定 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)
我有一个数据框,它由第一列中的 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)