0

2列のデータフレームがあります

'V1'     'V2'
joe      hi, my names is *joe*
anne     i was talking to *jake* the other day...
steve    *anne* should have the answer
steve    *joe* and I will talk later

列 1 の名前のリストを取得し、それを使用して列 2 でそれらを検索したいと思います。

(アスタリスクは、名前が長い文字列の中にあることを示すためのものです。)

私が本当に言いたいのは、列 1 のすべてのエントリについて、列 2 にもある場合はその行を印刷することです。

私はこれを試しました

for (i in dft[1]) if (i == dft[2]) print(i)

アイデアは、各列に表示される回数を数え、最終的に次のようになることです

V1    V2    V3
joe   1     2
anne  1     1
jake  0     1
steve 2     0

何か案は?

4

2 に答える 2

1

最初の列の各要素が各列に出現する回数をカウントしたい場合は、次のようにすることができます。

dat <- data.frame(V1=c("joe", "ann", "steve", "steve"),
                  V2=c("hi, my name is *joe*", 
                       "i was talking to *jake* the other day...", 
                       "*anne* should have the answer",
                       "*joe* and I will talk later"), 
                  stringsAsFactors=FALSE)

t(sapply(dat$V1, function(x) cbind(length(grep(x, dat$V1)), length(grep(x, dat$V2)))))

#      [,1] [,2]
#joe      1    2
#ann      1    1
#steve    2    0
#steve    2    0

sapply列の各要素に関数を適用しますV1V1この場合、関数はその要素が列と列に出現する回数V2cbindそれらを一緒にカウントします。 sapply結果を単純化して行列にします。最後にt、マトリックスを要求した形式に転置します。

于 2012-06-11T15:29:12.850 に答える