在为缺失数据分配因子的同时合并数据帧

时间:2015-01-07 18:17:31

标签: r merge dplyr

我有两个样本之间有重叠的数据帧(df1和df2)。我想从这些数据框创建一个新的数据框(df3),同时为df1中不存在于df2中的样本分配“缺席”(一个因子)。然后我创建第4个数据帧,在df2和df3上进行外连接。

我已经找到了很长的路要走这条路,但我会很感激如何使这段代码更加简洁。

Sample <- c("TG1","TG2","TG3","TG4","TG5","TG6","TG7","TG8","TG9","TG10")
blaOKP <- c(rep("-",10))
tet.B <- c(rep("-", 10))
df1<- data.frame(Sample,blaOKP,tet.B)

Sample <- c("TG1","TG4","TG8")
gyrA <- c(rep("T83I",3))
gyrB <- c(rep("D87N",3))
df2 <- data.frame(Sample,gyrA,gyrB)

df3 <- df1[-which(df1$Sample %in% df2$Sample),]
df3$gyrA <- "absent"
df3$gyrB <- "absent"
df3 <- df3[,c(1,3:5)]


require(plyr)
df4 <- join(x=df2, y=df3, by="Sample", type="full")

2 个答案:

答案 0 :(得分:2)

这是一种让结果类似于&#34; df4&#34; (按&#34;样品&#34;列)排序。这对于大数据集来说会更快。转换&#34; df1&#34; data.tablesetDT并将关键变量设置为&#34; Sample&#34; (setkey)。然后加入&#34; df2&#34;用&#34; df1&#34;删除第二列(&#34; blaOKP&#34;)之后,因为它不在&#34; df4&#34;中。分配&#34; tet.B&#34;列到&#34; NA&#34;,然后分配列&#34; 2:4&#34;与#34;缺席&#34;和&#34; - &#34;对于那些&#34; NA&#34;在&#34; gyrA&#34;

library(data.table)
setkey(setDT(df2), Sample)[df1[-2]][, 
       tet.B := NA_character_][is.na(gyrA),
         2:4 := list('absent', 'absent', '-')][]

答案 1 :(得分:2)

dplyr中加入anti_join(df1,df2, by="Sample") %>% mutate(gyrA="absent", gyrB="absent") %>% full_join(df2, by="Sample") 中的约定很恰当{。{3}}。

{{1}}