假设我有以下数据(实际示例中约 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