不足しているデータをデータフレームに入力しようとしています。
2つのデータフレームがありますが、それぞれに他のフレームにない情報が含まれています。これらは次のようになります。ここで、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が欠落している場合は、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に追加します。)
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))
ここで、df2にないdf1の値を見つけます。
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
逆に、df1にないdf2の値をfreqを0としてマージします。
明確化:あなたの質問では、あなたはx
任意の数を意味していたので、私はを使用runif
する代わりにいくつかの任意の数を生成していましたx
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加