如何在R中"逐行"而不是列式地"融化"?

RTr*_*n3k 1 r dataframe melt

我有一个数据框A,我想按行方式而不是列方式看起来像B(这也排除了其中的观察NA).这可以通过"融化"功能来实现吗?

A <- read.table(text="  Id1 Id2 Var1    Var2    Var3    
            1   1   1   2   NA  
            1   2   NA  3   4   
            1   3   5   6   7   ", header=T)


B <- read.table(text="  Id1 Id2 NewVar  
    1   1   1   
    1   1   2   
    1   2   3   
    1   2   4   
    1   3   5   
    1   3   6   
    1   3   7   ", header=T)
Run Code Online (Sandbox Code Playgroud)

我找到了一个类似问题的答案,但功能似乎有点矫枉过正,超出了我目前的R技能.

Pie*_*une 5

从tidyverse,融化 - >总结 - >不需要

library(reshape2)
library(tidyr)
melt(A, id=c("Id1", "Id2")) %>% group_by(Id1, Id2) %>%
  summarise(value=list(value[!is.na(value)])) %>% unnest()
# Source: local data frame [7 x 3]
# Groups: Id1 [1]
# 
#     Id1   Id2 value
#   <int> <int> <int>
# 1     1     1     1
# 2     1     1     2
# 3     1     2     3
# 4     1     2     4
# 5     1     3     5
# 6     1     3     6
# 7     1     3     7
Run Code Online (Sandbox Code Playgroud)

编辑

由于melt有一个NA删除参数(信用:@Frank),一个单行将做.注意:这一行是akrun的data.table方法的reshape2版本:

melt(A, id=c("Id1", "Id2"), na.rm=TRUE)[-3]
Run Code Online (Sandbox Code Playgroud)