2016-11-02 15 views
0

私は別のデータフレームで実行したいSQLクエリのデータフレームを持っています。R sqldfループし、クエリ名に基づいて名前を付けたデータフレームを作成します

queries <- structure(list(Name = c("innovation", "foos", "testing"), A = c("select * from data WHERE `TEXT` RLIKE '[[:<:]]innovat[^[:space:]]+[[:>:]]'", "select * from data WHERE `TEXT` RLIKE '[[:<:]]foo[^[:space:]]+[[:>:]]'", "select * from data WHERE `TEXT` RLIKE '[[:<:]]test[^[:space:]]+[[:>:]]'"), B = c("", "b", "b"), C = c("c", "c", "c")), .Names = c("Name", "Query", "Q1_2", "Q1_3"), row.names = c(NA, -3L), class = "data.frame") 

パッケージsqldfを使用してこれらのクエリをループし、各クエリから出力されたデータフレームの名前を、データフレームクエリで見つかった名前に対応させたいとします。また、データフレーム名と一致する各データフレームに新しい変数を作成する必要があります。

サンプルデータセット

data <- structure(list(Participant = 1:3, A = c("and other foo things", "testing test and foo", "nothing here"), B = c("", "b", "b"), C = c("c", "c", "c")), .Names = c("Participant", "TEXT", "other", "another"), row.names = c(NA, -3L), class = "data.frame") 

ような何か:

for (i in queries[2]) { 
    i<- as.data.frame(sqldf(i) 
         i$category <- i 

} 

しかし、これはまだ動作しません。提案?

+0

typo、データデータフレームに修正されました – lmcshane

答えて

1

df <- lapply(queries[[2]], sqldf) names(df) <- queries[[1]]

EDIT:動作するはずです。

0

は、すべてのデータフレームのリストにまとめ、データフレームを作成するために、各行のクエリをキャプチャ、行によって反復考えてみましょう。次に、あなたの地球環境への出力(またはより良いまだ、リストに維持する)ことができます。

dfList <- lapply(seq_len(nrow(queries)), function(i){ 
    df <- sqldf(queries$Query[i]) 
    df$Category <- queries$Name[i] 
    return(df) 
})  
names(dfList) <- queries$Name 

list2env(dfList, envir = .GlobalEnv) 

また、各クエリに名前列ベクトルを渡して使用mapplyのラッパー地図、:

handler <- function(x, y) { 
    df <- sqldf(x) 
    df$Category <- y 
    return(df) 
} 
dfList <- Map(handler, queries$Query, queries$Name) 
names(dfList) <- queries$Name 

list2env(dfList, envir = .GlobalEnv) 
関連する問題