Конвертировать данные в 10 столбцов в несколько строк - PullRequest
0 голосов
/ 30 марта 2020

У меня есть набор данных следующим образом: -

a <- data.frame(X1="A", X2="B", X3="C", X4="D", X5="0",
                X6="0", X7="0", X8="0", X9="0", X10="0")

В основном это столбец data.frame из 1 строки X 10.

В результирующем файле data.frame должны быть элементы столбца a как строки, а не столбцы. И любые столбцы в a, которые равны "0", не должны присутствовать в новом data.frame. Например -

#          b
#     [1]  A
#     [2]  B
#     [3]  C
#     [4]  D

Ответы [ 3 ]

3 голосов
/ 30 марта 2020

Используйте транспонирование и подмножество с логическим условием

 data.frame("b" = t(df1)[t(df1) != 0])

Второй взгляд дал мне шанс поиграть с кодом, вам не понадобилась транспонирование

data.frame("b" = df1[df1 != 0])
2 голосов
/ 30 марта 2020

Вы могли бы unlist, а затем subset

subset(data.frame(b = unlist(a), row.names = NULL), b != 0)

#  b
#1 A
#2 B
#3 C
#4 D
0 голосов
/ 30 марта 2020

Используя функцию pivot_longer, вы можете преобразовать ваш фрейм данных в более длинный формат и затем отфильтровать значения, которые равны «0». С помощью функции column_to_rownames из пакета tibble вы можете передать первый столбец как имена строк.

В целом, вы можете сделать что-то вроде этого:

library(tidyr)
library(dplyr)
library(tibble)


a %>% pivot_longer(everything(), names_to = "Row", values_to = "b") %>%
  filter(b != "0") %>% 
  column_to_rownames("Row")

   b
X1 A
X2 B
X3 C
X4 D 
...