将 10 列中的数据转换为一些行

Convert data in 10 columns into some rows

我有一个数据集如下:-

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

基本上是1行X 10列data.frame。

结果 data.frame 应该将 a 的列元素作为行而不是列。 a 中等于 "0" 的任何列不应出现在新的 data.frame 中。对于前。 -

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

使用 pivot_longer 函数,您可以将数据框重新整形为更长的格式,然后过滤为“0”的值。使用 tibble 包中的函数 column_to_rownames,您可以将第一列作为行名传递。

总而言之,您可以这样做:

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 

你可以 unlist 然后 subset

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

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

使用具有逻辑条件的转置和子集

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

再看一眼让我有机会玩代码,你不需要转置

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