2016-11-26 1 views
-1

私はこの1つRを使用して、項目を別の項目に保存するために列をフィルタリングする方法は?

columna <- c(1,2,3) 
columnb <- c("a b e", "c d", "a c d") 
columnc <- as.Date(c('2010-11-1','2008-3-25','2007-3-14')) 
alldata <- data.frame(columna,columnb,columnc) 
tokeep <- c("c", "e") 

のようなデータフレームを持っていないと私は唯一columnbtokeepで見つかった文字列を維持するためにcolumnbと同じalldataを修正取得したいと思います。

理想的には、私は

[ "e", "c", "c" ] 

するalldata$columnbを持っていると思います私が最初に私が

filter(alldata, alldata$columnb %in% tokeep) 
alldata[which(alldata$b %in% tokeep), ] 

ようなものを使用することができると思ったが、私は解決策を見つけるために管理することはできません。

誰かが私にこれを案内できますか?

+1

参照されます(http: //meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。答があなたのために働くなら、あなたはそれを受け入れていくつかのポイントを得、問題が解決されたことを他の人に知らせなければなりません。 –

答えて

1

我々は、我々が作成している正規表現はcまたはe以外のものを意味

paste0("[^",paste0(tokeep, collapse = "|"), "]") 

#[1] "[^c|e]" 

ある空の文字列

alldata$columnb<- gsub(paste0("[^",paste0(tokeep,collapse = "|"),"]"),"", alldata$columnb) 

alldata 
# columna columnb columnc 
#1  1  e 2010-11-01 
#2  2  c 2008-03-25 
#3  3  c 2007-03-14 

といけない文字を置換するgsubを使用して試すことができます。

EDIT

我々は、おそらく

paste0("[^",paste0(tokeep,collapse = ""),"]") 
#[1] "[^ce]" 
+1

私は現時点では投票できません。これはとても賢いロナクです! –

+1

'[^ c | e]'は 'c'、' | '、' e'を意味しないので、間違いなく '|'は必要ありません。また、 '[^ e]'は否定された*文字*クラスであるため、1文字以上の文字列では動作しません。 –

+0

私は参照してください。 Wiktorありがとう。 OPで示されている例によると、 'columnb'の値が1文字のみであると仮定しています。 –

1

別のオプションとして、regexで必要Wiktor第さんのコメントを1としてところで、[SOの答えを受け入れる方法】str_extract

library(stringr) 
alldata$columnb <- str_extract(alldata$columnb, paste(tokeep, collapse="|")) 
alldata$columnb 
[#1] "e" "c" "c" 
関連する問題