我试图在数据框中填写缺失的数据。
我有两个数据框,但每个数据框都包含另一个数据框中缺失的信息。它们看起来像这样,x是数字:
DATA FRAME 1 DATA FRAME 2
Headword Spelling Freq Headword Spelling Freq
Word1 Sp1a x Word1 Sp1a x
Word1 Sp1b x Word1 Sp1c x
Word1 Sp1d x Word2 Sp2a x
Word2 Sp2a x Word2 Sp2b x etc
因此,DF1对于Word 1具有拼写1a,1b和1d.DF2对于Word1具有拼写1a和1c。但是,DF1对Word2只有拼写2a,但DF2对Word2有拼写2a和2b。
我需要的是两个数据框都包含所有拼写,即使它们不存在于该数据中。因此,在数据帧1中缺少Sp1c的情况下,我希望它在那里并且频率= 0.
所以我希望它看起来像这样:
DATA FRAME 1 DATA FRAME 2
Headword Spelling Freq Headword Spelling Freq
Word1 Sp1a x Word1 Sp1a x
Word1 Sp1b x Word1 Sp1b 0
Word1 Sp1c 0 Word1 Sp1c x
Word1 Sp1d x Word1 Sp1d 0
Word2 Sp2a x Word2 Sp2a x
Word2 Sp2b 0 Word2 Sp2b x
我认为我需要使用多个联接并将它们组合在一起才能完成这项工作,但我不确定如何。
如何将数据帧2中的任何缺失值添加到数据帧1中的词条和拼写列,然后将频率设置为0? (反之亦然,将缺失值添加到数据帧1中。)
答案 0 :(得分:2)
使用dplyr库,首先创建数据框
library("dplyr")
df1<- data.frame(headword = c("word1","word1","word1","word2"),
spelling = c("sp1a","sp1b","sp1d","sp2a"),
freq = runif(1:4))
df2 <-data.frame(headword = c("word1","word1","word2","word2"),
spelling = c("sp1a","sp1c","sp2a","sp2b"),
freq = runif(1:4))
现在,找到df1中不在df2
中的值sub_res1 <- anti_join(df1,df2,by=c("headword","spelling"))
# headword spelling freq
# 1 word1 sp1b 0.6738556
# 2 word1 sp1d 0.4972938
sub_res1$freq <- 0
df2 <- full_join(df2,sub_res1,by=c("headword","spelling","freq"))
# headword spelling freq
# 1 word1 Sp1a 0.50293511
# 2 word1 sp1c 0.67857973
# 3 word2 sp2a 0.05604982
# 4 word2 sp2b 0.83378253
# 5 word1 sp1b 0.00000000
# 6 word1 sp1d 0.00000000
反之亦然,将df2中不在df1中的值与freq合并为0
澄清:在您的问题中,您曾使用x
表示某个任意数字,因此,我使用runif
生成一些任意数字而不是使用{{1 }}。
答案 1 :(得分:0)
使用merge函数连接两个数据框中的缺失值
df <- merge (dataframe1, dataframe2 , all.x=T, all.y=T)