融化具有互斥值的列,并增加一个原点列。

问题描述 投票:1回答:1

我有一个数据框,它看起来像这样(m)。

a <- rep(c("one","two"),6)
b <- c(1,2,3,4,NA,NA,NA,NA,NA,NA,NA,NA)
c <- c(NA,NA,NA,NA,5,6,7,8,NA,NA,NA,NA)
d <- c(NA,NA,NA,NA,NA,NA,NA,NA,9,10,11,12)
(m <- cbind(a,b,c,d))

我想把它还原成这样的数据框(n):

e <- seq(1:12)
f <- rep(c("b","c","d"), each = 4)
(n <- cbind(a,e,f))

我试过熔化,但显然不成功。

melt(data = m, na.rm=TRUE)

Var1 Var2 value
1     1    a   one
2     2    a   two
3     3    a   one
4     4    a   two
5     5    a   one
6     6    a   two
7     7    a   one
8     8    a   two
9     9    a   one
10   10    a   two
11   11    a   one
12   12    a   two
13    1    b     1
14    2    b     2
15    3    b     3
16    4    b     4
29    5    c     5
30    6    c     6
31    7    c     7
32    8    c     8
45    9    d     9
46   10    d    10
47   11    d    11
48   12    d    12

有什么必要的改变,还有没有比熔化更好的功能?

r dataframe merge na melt
1个回答
1
投票

一个带有 pivot_longer

library(dplyr)
library(tidyr)
m %>%
   pivot_longer(cols = b:d, names_to = 'f', values_to ='e', values_drop_na = TRUE)

资料

m <-  data.frame(a, b, c, d)
© www.soinside.com 2019 - 2024. All rights reserved.