0
複数の列内の文字列のための効率的なフィルタ(最初と最後の、いくつかは、いくつかのではない資産計上される)とスコアは、それぞれの名前に関連付けられている:R:私は名前のデータフレームを持って
df = data.frame(name = c("Mark Johnson","John Roberts","Sue mcguire","kat Long","dan Scott"), name2 = c("sam marks", "Mark Jones", "tim briar", "jonas Stark", "Mike Robinson"), score = c(2,3,4,5,5))
name name2 score
1 Mark Johnson sam marks 2
2 John Roberts Mark Jones 3
3 Sue mcguire tim briar 4
4 kat Long jonas Stark 5
5 dan Scott Mike Robinson 5
私はなりたいです
df %>% filter(name %in% c("mark","john","Long","briar"))
私はgrepl
の使用を避け、代わりにfilter
と%in%
を使用したい:ちょうど例えば、いずれか列から最初または最後の名前を含めることによって、私のデータフレームをフィルタリングすることができ。しかし、これが返されます。
[1] name score
<0 rows> (or 0-length row.names)
の代わりに、行1、2、3、および4 name|name2
をも動作しませんでした。たぶんそれは、私がname
とname2
列にstrsplit()
か何かをしてから再結合する必要があるからかもしれません。しかし、これはあまりエレガントではなく、私のdf
は実際には何百万行もあるので、私の場合はパフォーマンスが重要です。これを達成する最良の方法は何ですか?
でしょう。この作品で
any_vars
を交換、その後、列の両方に一致する必要がある場合我々はfilter_at
で試すことができますか?これは互換性がないので 'grepl'の使用を避けたいのです。これは私が参照しているリンクです:https://stackoverflow.com/questions/27468166/grepl-for-dplyr-sql-table – warship
@warship互換性の問題があることは非常に悪いです。 %in%を使用する場合は、 'separate'を使用して2つの列に分割する必要があります。すべての関数がsqliteで動作するBTW – akrun
@warshipリンクに基づいて、 '%like%'は動作するはずです。あなたが試みたことがあります – akrun