2017-05-08 16 views
1

このようにdata.frameをフィルタリングする方法はありますか?私はすべての行と列、特定のサブ文字列が発生する場所、次の列を保持したいと思います。データセットの別のカラムを通す行の値に基づいて列を選択する方法

df <- read.table(header=TRUE, stringsAsFactors = FALSE, text = 
         "date col2 col3 col4 col5 col6 
        1 boston 22 new_york 15  atlanta 5 
        2 boston 21 new_york 15  atlanta 0 

        ") 

cities <- c('boston', 'atlanta') 
#filter by cities 
#output 
#col2 col3 col5 col6 
#boston 22 atlanta 5 
#boston 21 atlanta 0 

答えて

0

我々ループは、その後、インデックスに基づいて、すべての要素が論理ベクトル(「I1」)を作成する%in%都市があるかどうかを確認TRUE列の列インデックスを取得し、次の列


i1 <- sapply(df[c(TRUE, FALSE)], function(x) all(x %in% cities)) 
df[sort(which(names(df) %in% names(i1)[i1]) + rep(0:1, each = 2))] 
または別のオプションは、列と次のサブセットは、すべての要素が「都市」に見出される ifをチェックし、データセットのサブセット代替列インデックスの配列をループであります列(残りの要素はNULLであり、 cbind list要素アウト)、 Fiter

do.call(cbind, Filter(Negate(is.null), lapply(seq(1, ncol(df), by = 2), 
       function(i) if(all(df[,i] %in% cities)) df[i:(i+1)]))) 
関連する問題