将丢失的行添加到R

时间:2016-07-08 12:03:12

标签: r dataframe

我试图在数据框中填写缺失的数据。

我有两个数据框,但每个数据框都包含另一个数据框中缺失的信息。它们看起来像这样,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中。)

2 个答案:

答案 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)