2016-04-15 9 views
0

のために働いていない私は2つのデータフレームを持って、最初の1(dt)すべてchrと第二1(TargetWord)の含まれている辞書は、同様chr含まれています。私はpmatchをで検索し、TargetWordで利用可能な単語を検索し、TargetWordから返されました。データフレームが小さいときはうまくいきます。 しかし、データフレームが巨大で、最初の列のみのワード位置が返され、残りの列がNAになっているときに問題が発生します。R:pmatchが大きなデータフレーム

## Data Table 
word_1 <- c("conflict","", "resolved", "", "", "") 
word_2 <- c("", "one", "tricky", "one", "", "one") 
word_3 <- c("thanks","", "", "comments", "par","") 
word_4 <- c("thanks","", "", "comments", "par","") 
word_5 <- c("", "one", "tricky", "one", "", "one") 
dt <- data.frame(word_1, word_2, word_3,word_4, word_5, stringsAsFactors = FALSE) 

## Targeted Words 
TargetWord <- data.frame(cbind(c("conflict", "thanks", "tricky", "one", "two", "three"))) 

## convert into matrix (needed) 
dt <- as.matrix(dt) 
TargetWord <- as.matrix(TargetWord) 

result <- `dim<-`(pmatch(dt, TargetWord, duplicates.ok=TRUE), dim(dt)) 
print(result) 

戻る結果、

 [,1] [,2] [,3] [,4] [,5] 
[1,] 1 NA 2 2 NA 
[2,] NA 4 NA NA 4 
[3,] NA 3 NA NA 3 
[4,] NA 4 NA NA 4 
[5,] NA NA NA NA NA 
[6,] NA 4 NA NA 4 

今すぐ怒鳴るなどの2つの .csvを読んだ後は、 結果はちょうど私が上記の結果などのすべての列のためにそれをしたい最初の列です。 Bellow、dt1 = 79 * 50データフレーム、およびword_dict 13901 * 1データフレーム。

#################### on big data ##################################### 
dt1 <- read.csv("C:/Users/Wonderland/Downloads/string_feature.csv", stringsAsFactors = FALSE) 
word_dict <- read.csv("C:/Users/Wonderland/Downloads/word_dict.csv", stringsAsFactors = FALSE) 

dt1 <- as.matrix(dt1) 
word_dict <- as.matrix(word_dict) 

result <- `dim<-`(pmatch(dt1, word_dict, duplicates.ok=TRUE), dim(dt1)) 
print(result) 
+0

エラーが表示されますか?予想外の結果ですか?もしそうなら、それは期待された結果とどう違うのでしょうか?誰が助けてくれると思いますか? – nicola

+0

おかげでニコラ。私は実際にエラーが発生していない、予期しない結果が何であるか、私の実際のデータを実行しているときに同じコードを意味する、結果は1つの列(最初の列)のみです。私は、データフレーム全体の単語辞書から単語の位置を見つけたい – NewR

+0

問題の再現性のある例と明確な説明が良い質問から得られるはずです。あなたはどちらも提供していません。 「結果は1列のみ」とはどういう意味ですか?他の列はすべて「NA」ですか?または他の列はありませんか?データをサブセット化しようとしましたが、問題が解決しない場合は表示されますか?なぜデータを共有しないのですか?あるいは、もしそれらが大きすぎるならば、それらの少なくともいくつかの情報(例えば、 'str'の出力と関連する各オブジェクトの同様のもの)があります。 – nicola

答えて

0

で試してみてくださいが適用されます。

apply(dt,2,function(x) pmatch(x,TargetWord,duplicates.ok = T)) 

あなたが見ることができるように、結果は同じであるが、それはおそらく、巨大なデータフレームで動作します

 word_1 word_2 word_3 word_4 word_5 
[1,]  1  NA  2  2  NA 
[2,]  NA  4  NA  NA  4 
[3,]  NA  3  NA  NA  3 
[4,]  NA  NA  NA  NA  NA 
[5,]  NA  NA  NA  NA  NA 
[6,]  NA  NA  NA  NA  NA 

私が試した:

word_1 <- rep(c("conflict","", "resolved", "", "", ""),1000) 
word_2 <- rep(c("", "one", "tricky", "one", "", "one"),1000) 
word_3 <- rep(c("thanks","", "", "comments", "par",""),1000) 
word_4 <- rep(c("thanks","", "", "comments", "par",""),1000) 
word_5 <- rep(c("", "one", "tricky", "one", "", "one"),1000) 

すべて同じコードで、それはworですked。