# Развертывание списка строк перед его преобразованием - PullRequest
0 голосов
/ 02 января 2019

У меня есть вывод из более старого программного обеспечения, которое упаковывает записи для каждой транзакции в несколько строк.Я хочу развернуть эти строки в один плоский кадр данных.Я нашел решения для разворачивания столбцов, но не строк, и могу делать то, что мне нужно в цикле, но вывод велик, и я бы предпочел более быстрое решение, чем цикл.

Пример: я прочитал в R из файла .csv 6 фрагментов информации о каждой из двух транзакций ("tran"), которые заключены в четыре строки.

Следующее представляет и имитирует мои данные, когда я считываю их в R из файла .csv:

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))

Я посмотрел на аккуратные процедуры для сбора и распространения файлов данных, а также для плавления и преобразования в форму, но, насколько я могу судить, мне нужно сначала развернуть строки.

1 Ответ

0 голосов
/ 02 января 2019

Если все ваши входные данные содержат 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...