首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中,使用melt和cast重塑“混合”数据帧

在R中,使用melt和cast重塑“混合”数据帧
EN

Stack Overflow用户
提问于 2017-02-07 06:39:32
回答 3查看 421关注 0票数 2

我想将两种类型的值相互对比(dupl和orig)。是否可以轻松地对以下数据帧进行整形

代码语言:javascript
复制
record=c("r1","r1","r2","r3","r3")
v1=rep(0,5)
v2=c(0,0,1,0,0)
v3=c(1,1,0,1,1)
type=c("orig","dupl","orig","orig","dupl")

df<-data.frame(record, v1, v2, v3, type)
df
  record v1 v2 v3 type
1     r1  0  0  1 orig
2     r1  0  0  1 dupl
3     r2  0  1  0 orig
4     r3  0  0  1 orig
5     r3  0  0  1 dupl

看起来像这样?

代码语言:javascript
复制
record  v1.orig v2.orig v3.orig v1.dupl v2.dupl v3.dupl
r1         0       0       1       0       0       1
r2         0       1       0            
r3         0       0       0       0       0       0

重点是我可以画出vX.orig和vX.dupl的对比图。或者有更好的方法来做这件事?我正在查看dcast(),但似乎不能得到我想要的,可能是因为我的数据只是部分熔化(沿着类型?)。

编辑:以下是我尝试过的内容:

代码语言:javascript
复制
df1<-melt(df,id="record")
dcast(df1,record~value, margins=TRUE)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-07 06:45:46

你可以这样做:

代码语言:javascript
复制
library(reshape2)
melted <- melt(df, id.vars= c("record", "type"))
dcast(melted,  record ~ variable + type)

  record v1_dupl v1_orig v2_dupl v2_orig v3_dupl v3_orig
1     r1       0       0       0       0       1       1
2     r2      NA       0      NA       1      NA       0
3     r3       0       0       0       0       1       1

或者我最初的回答是:

代码语言:javascript
复制
library(tidyverse)
df %>% gather(vx, num, -record, -type) %>%
    unite(type, vx, type) %>%
    spread(type, num)
票数 3
EN

Stack Overflow用户

发布于 2017-02-07 07:00:19

在base R中,这是一个简单的重塑:

代码语言:javascript
复制
reshape(df, idvar="record", timevar="type", direction="wide")

#  record v1.orig v2.orig v3.orig v1.dupl v2.dupl v3.dupl
#1     r1       0       0       1       0       0       1
#3     r2       0       1       0      NA      NA      NA
#4     r3       0       0       1       0       0       1
票数 2
EN

Stack Overflow用户

发布于 2017-02-07 11:44:29

下面是从reshape2使用recast的另一种选择

代码语言:javascript
复制
library(reshape2)
recast(df, record~variable + type)
#   record v1_dupl v1_orig v2_dupl v2_orig v3_dupl v3_orig
#1     r1       0       0       0       0       1       1
#2     r2      NA       0      NA       1      NA       0
#3     r3       0       0       0       0       1       1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42078558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档