我有一个数据框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技能.
从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)
| 归档时间: |
|
| 查看次数: |
1080 次 |
| 最近记录: |