使用 python、r、sql 在特定行转置数据?

使用 python、r、sql 在特定行转置数据?

假设我有以下数据(实际示例中约 50k 行)

A
B
C
D
E
X
A
B
C
D
E
F
G
H
X

我希望它看起来

A、B、C、D、E、X

A、B、C、D、E、F、G、H、X

所以从技术上讲,我想转置数据,但在特定的行进行剪切。

如何在 Excel、R、SQL 或 python 中实现这一点?

答案1

使用 R 这里有几个可能的答案略有不同,因为我不确定你到底想要什么

# Just a step to read in an extended version of your sample data

dat <- as.matrix(read.table(text=
"A
B
C
D
E
A
B
C
D
E
F
A
B
C
D
E
F
G
H
A
B
C
D
E
F"))

这是进行拆分的一种方式。您可以创建一个索引来拆分组。然后根据分组拆分行。

splitgrp <- cumsum(ave(dat=="A", dat)) # group index
splitlist <-split(dat,splitgrp) # if you want a list

然后,您可以根据需要将该列表制作成不同类型的对象,如下所示:

vecofstrings <- sapply(splitlist,paste0,collapse="") # if you want a vector
df <- data.frame(vecofstrings) # if you want a data frame
mat <- matrix(vecofstrings) # if you want a matrix

最后,这里有几种保存这些对象的方法:

write.table(mat,"mat.csv")
write.table(mat,"mat.csv", quote=F, row.names=F)

# Here are a few ways to save a data frame.
write.table(df,"df.txt")
write.table(df,"df.txt", quote=F)  # no quotes in the saved file
write.table(df,"df.txt", row.names=F)  # no row names in the saved file
write.table(df,"df.txt", row.names=F, col.names=F)  # no row or column names in the saved file
write.table(df,"df.txt",row.names=F, col.names=F, quote=F)  # no row or columns names and no quotes in the saved file

相关内容