将 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])
我有一个数据集如下:-
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])