2016-01-19 15 views
5

部分文字列と完全文字列の2つのリストと一致する場合は、文字列全体を返します。一意のマッチのみを返します(一度)。部分文字列と完全文字列の2つのリストと一致する場合は、文字列全体を返します。

私はCSVファイルを持っていて、各行に長い文字列(長いリスト)があるとします。次に、substrを使用して文字列を短くしてから、重複する文字列を一意にしてドロップします。次に、長い文字列リストdf12と一意の短いリストdf14を比較し、部分文字列検索(df14df12)に一意の一致がある場合は、df12から文字列全体を返します。

これはdf12(長い文字列のリスト)

[1] I like stackoverflow very much today 
    [2] I like stackoverflow much today 
    [3] I dont like stackoverflow very much today 
    [4] I dont like you! 
    [5] What? 

df13<-substr(df12, start=0, stop=30) 

これはdf13(短縮文字列 - ユニークではない)である

[1] I like stacko 
[2] I like stacko 
[3] I dont like s 
[4] I dont like y 
[5] What? 
df14<-unique(df13) 

これでdf14(短縮文字列 - ユニークな文字列のユニークな方法を適用した後)

[1] I like stacko 
    [2] I dont like s 
    [3] I dont like y 
    [4] What? 

これは、リストへのインデックスを知っているように、これは、短い文字列を含むDF12と出力それらをすべての可能な一致、とDF14内のすべての短い文字列に一致する一つのアプローチである最後に

[1] I like stackoverflow very much today 
    [2] I dont like stackoverflow very much today 
    [3] I dont like you! 
    [4] What? 
+0

'df13 <-substr(df12、start = 0、stop = 30)'は期待される出力を生成しません。 'df13 <-substr(df12、start = 0、stop = 13)'でなければならない? – NGaffney

答えて

3

私が望む結果であり、 df12のものと一致するもの:

df1 <- c('I like stackoverflow very much today', 'I like stackoverflow much today', 
     'I dont like stackoverflow very much today', 'I dont like you!', 
     'What?') 
df2 <- c('I like stacko', 'I dont like s', 'I dont like y', 'What?') 

sapply(df2, function(x) df1[grepl(x, df1)]) 
$`I like stacko` 
[1] "I like stackoverflow very much today" "I like stackoverflow much today"  

$`I dont like s` 
[1] "I dont like stackoverflow very much today" 

$`I dont like y` 
[1] "I dont like you!" 

$`What?` 
[1] "What?" 
+0

あなたの非常に優雅な解決策で、サプリー(df2、function(x)df1 [grepl(x、df1、fixed)]が追加されました。 = TRUE)]) "'私は、短い文字列リストへの一意の文字列に対して複数の一致が存在する場合、マッチの中で最長のものを得る方法があるのだろうか? –

+1

上記の 'sapply'コマンドの出力を' l'に保存して、 'l'と言うことができます。このコマンドを実行すると、短い文字列ごとに最長一致する長い文字列を得ることができます:' lapply(l、function x)x [nchar(x)== max(nchar(x))]) – Gopala

+0

ありがとうございます@ user3949008!これはとても役に立ちました! –

関連する問題