2016-04-13 6 views
2

に追加し、以下のように私は2つのデータテーブルを持っている:
バイグラム検索データと新しい列

w1w2   freq w1   w2  
common names 1  common  names 
department of 4  department of 
family name 6  family  name 

bigrams = setDT(structure(list(w1w2 = c("common names", "department of", "family name" 
), freq = c(1L, 4L, 6L), w1 = c("common", "department", "family" 
), w2 = c("names", "of", "name")), .Names = c("w1w2", "freq", 
"w1", "w2"), row.names = c(NA, -3L), class = "data.frame")) 

ユニグラム

w1   freq 
common  2 
department 3 
family  4 
name   5 
names   1 
of   9 

unigrams = setDT(structure(list(w1 = c("common", "department", "family", "name", 
"names", "of"), freq = c(2L, 3L, 4L, 5L, 1L, 9L)), .Names = c("w1", 
"freq"), row.names = c(NA, -6L), class = "data.frame")) 

所望の出力を

w1w2   freq w1   w2  w1freq w2freq 
common names 1  common  names 2   1 
department of 4  department of  3   9 
family name 6  family  name 4   5 

私がこれまで行ってきた何

setkey(bigrams, w1) 
setkey(unigrams, w1) 
result <- bigrams[unigrams] 

これは私にw1ためi.freq列を与えるが、私はi.freq列がw2のFREQを反映するように更新されw2のための同じをしようとします。

別の列にw1w2の両方の周波数を得るにはどうすればよいですか?

注:私はすでにあなたが整形のビットでこれを行うことができdata.table Lookup value and translateModify column of a data.table based on another column and add the new column

+0

data.tableソリューションをお探しですか?そうでなければ、これはうまくいくはずです:bigrams $ w1freq < - unigrams $ freq [match(bigrams $ w1、unigrams $ w1)]; bigrams $ w2freq < - ユニグラム$ freq [一致(bigrams $ w2、unigrams $ w1)]; – chinsoon12

+0

@ chinsoon12はい私は大きなデータセットのためのソリューションを使用する予定であるので、私はそれをdata.tableを使用して解決することを好むだろう。 –

+0

はあなたの望む出力の 'freq'列ですか? – SymbolixAU

答えて

3

2つの結合を行うことができ、v1.9.6のdata.tableでは、異なる列名に対してon=引数を指定できます。

library(data.table) 

bigrams[unigrams, on=c("w1"), nomatch = 0][unigrams, on=c(w2 = "w1"), nomatch = 0] 

      w1w2 freq   w1 w2 i.freq i.freq.1 
1: family name 6  family name  4  5 
2: common names 1  common names  2  1 
3: department of 4 department of  3  9 
2

への解決策を見てきました。

library(dplyr) 
library(tidyr) 

bigrams %>% 
    rename(w1w2_string = w1w2, 
     w1w2_freq = freq) %>% 
    gather(order, string, 
     w1, w2) %>% 
    left_join(unigrams %>% 
       rename(string = w1)) %>% 
    gather(type, value, 
     string, freq) %>% 
    unite(order_type, order, type) %>% 
    spread(order_type, value) 

編集:バイグラムと2つのユニグラム:説明

あなたが作ることができる最初の観察は、バイグラムは、3つの異なる分析単位についての事実情報に含まれていることです。分析単位がユニグラムになるように長い形式に変換する。次に、他のunigramデータをマージすることができます。ユニグラムには、行ごとに2つの異なる情報があります。ユニグラムの頻度とユニグラムのテキストです。解析の単位がユニグラムに関する情報の一部であるように、長い形式に再度変換します。新しい列がユニグラムに関する情報の一種であるように、今広げてください。

+0

解決策を少し説明していただけますか? –

+0

説明を参照 – bramtayl

関連する問題