#r
#r
Вопрос:
У меня есть массив, подобный этому
DATA01 Data03 Sam2
23.2 W.343 25
67.9 3.4 3.6
2.3
Необходимо преобразовать следующим образом
DATA01
23.2
67.9
2.3
Data03
W.343
3.4
Sam2
25
3.6
Я пробовал с t (транспонировать)
t(paste(unlist(Data), collapse =" "))
но это не решает проблему
Комментарии:
1. Можете ли вы однозначно указать данные с помощью
dput(x)
?DATA01
Это заголовок столбца или это данные (а это матрица)?2. Попробуйте другой
t
, как вt(t(unlist(Data)))
Ответ №1:
Вы можете передать имя столбца и значение для создания такого фрейма данных с одним столбцом.
data.frame(value = unlist(mapply(function(x, y) c(y,na.omit(x)),
df, names(df))), row.names = NULL)
Или с помощью purrr
:
library(purrr)
imap(df, ~c(.y, na.omit(.x))) %>% flatten_chr() %>% data.frame(value = .)
# value
#1 DATA01
#2 23.2
#3 67.9
#4 2.3
#5 Data03
#6 W.343
#7 3.4
#8 Sam2
#9 25
#10 3.6
данные
Предполагая, что это ваши данные :
df <- structure(list(DATA01 = c(23.2, 67.9, 2.3), Data03 = c("W.343",
"3.4", NA), Sam2 = c("25", "3.6", NA)), row.names = c(NA, -3L
), class = "data.frame")
df
# DATA01 Data03 Sam2
#1 23.2 W.343 25
#2 67.9 3.4 3.6
#3 2.3 <NA> <NA>
Комментарии:
1. Ваша идея приводит меня к
data.frame(value = na.omit(unlist(rbind(names(df),df))))
, илиas.vector(na.omit(unlist(rbind(names(df),df))))
если вертикальное расположение не важно.