我有旧软件的输出,该软件将每笔交易的记录包装成多行。我想将这些行包装成一个平面数据框。我找到了解开列而不是行的解决方案,并且可以在循环中完成我需要的操作,但是输出很大,与循环相比,我希望有一个更快的解决方案。
示例:我从.csv文件中读入R的有关两个事务(“ tran”)中的每一个的6条信息,这些信息打包成四行。
当我从.csv文件读入R时,以下内容代表并模拟了我的数据:
V1 <- c("tran1.col1", "tran1.col4","tran2.col1", "tran2.col4")
V2 <- c("tran1.col2", "tran1.col5", "tran2.col2", "tran2.col5")
V3 <- c("tran1.col3", "tran1.col6", "tran2.col3", "tran2.col6")
df <- as.data.frame(matrix(c(V1, V2, V3), ncol = 3))
我希望将以上内容转换为以下内容:
X1 <- c("tran1.col1", "tran2.col1")
X2 <- c("tran1.col2", "tran2.col2")
X3 <- c("tran1.col3", "tran2.col3")
X4 <- c("tran1.col4", "tran2.col4")
X5 <- c("tran1.col5", "tran2.col5")
X6 <- c("tran1.col6", "tran2.col6")
df.x <- as.data.frame(matrix(c(X1, X2, X3, X4, X5, X6), ncol = 6))
我研究了整齐的例程,以收集和传播数据文件,以及以整形的方式进行融化和变形,但是据我所知,我需要首先解开行。
答案 0 :(得分:1)
如果您的所有输入都包含6条信息(无论交易多少),那么以下内容应该有效。
vec <- as.character(unlist(t(df)))
df.x <- as.data.frame(matrix(vec, ncol = 6, byrow = T))
分解以解释发生了什么...
# Transpose the df (to a matrix)
matrix <- t(df)
# Now that the matrix is in this sequence it will allow us to unlist it so
# that it produces a vector in the correct sequence (i.e tran1.col1,
# tran1.col2 .. tran2.col1, tran1.col2)
vec <- unlist(matrix)
# Now we can coerce it back to a data.frame, defining the number of columns
# and creating it by row (rather than column)
df.x <- as.data.frame(matrix(vec, ncol = 6, byrow = T))