我想将两种类型的值相互对比(dupl和orig)。是否可以轻松地对以下数据帧进行整形
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看起来像这样?
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(),但似乎不能得到我想要的,可能是因为我的数据只是部分熔化(沿着类型?)。
编辑:以下是我尝试过的内容:
df1<-melt(df,id="record")
dcast(df1,record~value, margins=TRUE)发布于 2017-02-07 06:45:46
你可以这样做:
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或者我最初的回答是:
library(tidyverse)
df %>% gather(vx, num, -record, -type) %>%
unite(type, vx, type) %>%
spread(type, num)发布于 2017-02-07 07:00:19
在base R中,这是一个简单的重塑:
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发布于 2017-02-07 11:44:29
下面是从reshape2使用recast的另一种选择
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 1https://stackoverflow.com/questions/42078558
复制相似问题