【问题标题】:Melting columns with mutually exclusive values and adding an origin column熔化具有互斥值的列并添加原始列
【发布时间】:2020-08-28 17:21:48
【问题描述】:

我有一个看起来像这样 (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

什么是必要的改变,还有比融化更好的功能吗?

【问题讨论】:

  • 试试library(reshape2); melt(as.data.frame(m), id.vars = "a", na.rm = TRUE)

标签: r dataframe merge na melt


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多