将整个数据帧转置为一行数据帧-(或转置 data.table 和列绑定的每一行)
Transpose whole dataframe into one row dataframe- (or transposing each row of data.table and column binding)
我曾尝试在库重塑和 data.table
的帮助下转换 my_dataset
以实现 result.dataset
但尚未成功。
我有一个数据 table my_dataset
看起来像这样 :-
A X Count
id1 b 1
id1 c 2
我想要 result.dataset
看起来应该是这样的 :-
A X1 Count1 X2 Count2
id1 b 1 c 2
如果有人能帮助我获得上面的 result.dataset
,最好使用 reshape
或 data.table
(或两者都使用 lib),那就太好了。
我们可以聚合行并使用 cSplit
拆分它们。
library(data.table)
library(splitstackshape)
dat2 <- setDT(dat)[, lapply(.SD, paste, collapse = ","), by = A]
cols <- c(names(dat[, 1]), paste(names(dat[, -1]),
rep(1:nrow(dat), each = nrow(dat),
sep = "_"))
cSplit(dat2, splitCols = names(dat[, -1]))[, cols, with = FALSE]
# A X_1 Count_1 X_2 Count_2
# 1: id1 b 1 c 2
数据
dat <- read.table(text = "A X Count
id1 b 1
id1 c 2",
header = TRUE, stringsAsFactors = FALSE)
试试这个:
dt <- read.table(text = 'A X Count
id1 b 1
id1 c 2',header=T)
a <- aggregate(.~A, dt, paste, collapse=",")
library(splitstackshape)
result <- concat.split.multiple(data = a, split.cols = c("X","Count"), seps = ",")
输出:
> result
A X_1 X_2 Count_1 Count_2
1: id1 b c 1 2
这是一个仅使用 reshape2
的解决方案(尝试坚持使用建议的软件包)。它首先添加一列 rep
,允许调用 dcast
。
require(reshape2)
#adding rep
my_dataset$rep = unlist(tapply(my_dataset$A, my_dataset$A, function(x)1:length(x)))
#cast at work
C1 = dcast(my_dataset, A ~ paste('X',rep, sep=''), value.var='X')
C2 = dcast(my_dataset, A ~ paste('Count',rep, sep=''), value.var='Count')
result.dataset = cbind(C1, C2[,-1])
虽然这些列的顺序与您的示例不同。
我曾尝试在库重塑和 data.table
的帮助下转换 my_dataset
以实现 result.dataset
但尚未成功。
我有一个数据 table my_dataset
看起来像这样 :-
A X Count
id1 b 1
id1 c 2
我想要 result.dataset
看起来应该是这样的 :-
A X1 Count1 X2 Count2
id1 b 1 c 2
如果有人能帮助我获得上面的 result.dataset
,最好使用 reshape
或 data.table
(或两者都使用 lib),那就太好了。
我们可以聚合行并使用 cSplit
拆分它们。
library(data.table)
library(splitstackshape)
dat2 <- setDT(dat)[, lapply(.SD, paste, collapse = ","), by = A]
cols <- c(names(dat[, 1]), paste(names(dat[, -1]),
rep(1:nrow(dat), each = nrow(dat),
sep = "_"))
cSplit(dat2, splitCols = names(dat[, -1]))[, cols, with = FALSE]
# A X_1 Count_1 X_2 Count_2
# 1: id1 b 1 c 2
数据
dat <- read.table(text = "A X Count
id1 b 1
id1 c 2",
header = TRUE, stringsAsFactors = FALSE)
试试这个:
dt <- read.table(text = 'A X Count
id1 b 1
id1 c 2',header=T)
a <- aggregate(.~A, dt, paste, collapse=",")
library(splitstackshape)
result <- concat.split.multiple(data = a, split.cols = c("X","Count"), seps = ",")
输出:
> result
A X_1 X_2 Count_1 Count_2
1: id1 b c 1 2
这是一个仅使用 reshape2
的解决方案(尝试坚持使用建议的软件包)。它首先添加一列 rep
,允许调用 dcast
。
require(reshape2)
#adding rep
my_dataset$rep = unlist(tapply(my_dataset$A, my_dataset$A, function(x)1:length(x)))
#cast at work
C1 = dcast(my_dataset, A ~ paste('X',rep, sep=''), value.var='X')
C2 = dcast(my_dataset, A ~ paste('Count',rep, sep=''), value.var='Count')
result.dataset = cbind(C1, C2[,-1])
虽然这些列的顺序与您的示例不同。