私は、指定された期間 "dateperiod"で発生したGPSの場所を使用しています。私は1つの行(dateperiod)の値を使用して、その日付期間の列を調べ、作業中の行の値(外乱までの距離)を抽出したいと思います。しかし、私はループ内でこれをやっています複数の外乱データフレーム。ダミーデータセット:data.tableを使用して、複数のdata.framesのループ内の値と一致する名前の列から値を抽出する
例の基本データ(data_basic_DT):
structure(list(EndId = 1:9, dateperiod = c(141101L, 141101L,
141101L, 141101L, 141101L, 141101L, 141101L, 141101L, 141101L
)), .Names = c("EndId", "dateperiod"), row.names = c(NA, -9L), class = "data.frame")
例外乱データ1(low_roads):
structure(list(EndId = 1:9, dateperiod = c(141101L, 141101L,
141101L, 141101L, 141101L, 141101L, 141101L, 141101L, 141101L
), `151101` = c(710.211, 684.471, 676.831, 762.955, 704.06, 674.685,
682.495, 686.586, 696.348), `150501` = c(710.211, 684.471, 676.831,
762.955, 704.06, 674.685, 682.495, 686.586, 696.348), `141101` = c(710.211,
684.471, 676.831, 762.955, 704.06, 674.685, 682.495, 686.586,
696.348), `140501` = c(710.211, 684.471, 676.831, 762.955, 704.06,
674.685, 682.495, 686.586, 696.348), `131101` = c(710.211, 684.471,
676.831, 762.955, 704.06, 674.685, 682.495, 686.586, 696.348),
`130501` = c(710.211, 684.471, 676.831, 762.955, 704.06,
674.685, 682.495, 686.586, 696.348), `121101` = c(710.211,
684.471, 676.831, 762.955, 704.06, 674.685, 682.495, 686.586,
696.348)), .Names = c("EndId", "dateperiod", "151101", "150501",
"141101", "140501", "131101", "130501", "121101"), row.names = c(NA,
-9L), class = "data.frame")
例外乱データ2(high_roads):
structure(list(EndId = 1:9, dateperiod = c(141101L, 141101L,
141101L, 141101L, 141101L, 141101L, 141101L, 141101L, 141101L
), `151101` = c(806.415, 802.56, 502.35, 1234.2, 704.06, 685.23,
682.495, 1002.3, 696.348), `150501` = c(710.211, 684.471, 676.831,
762.955, 704.06, 802.56, 502.35, 1234.2, 696.348), `141101` = c(710.211,
130.25, 453.25, 762.955, 704.06, 674.685, 682.495, 686.586, 696.348
), `140501` = c(710.211, 684.471, 802.56, 502.35, 1234.2, 674.685,
682.495, 686.586, 696.348), `131101` = c(710.211, 684.471, 676.831,
762.955, 704.06, 674.685, 502.35, 1234.2, 704.06), `130501` = c(710.211,
684.471, 676.831, 762.955, 704.06, 674.685, 682.495, 686.586,
696.348), `121101` = c(502.35, 1234.2, 704.06, 762.955, 704.06,
674.685, 682.495, 686.586, 696.348)), .Names = c("EndId", "dateperiod",
"151101", "150501", "141101", "140501", "131101", "130501", "121101"
), row.names = c(NA, -9L), class = c("data.table", "data.frame"
), .internal.selfref = <pointer: 0x0000000006640788>)
したがって、EndIdごとに、dateperiodを調べて、この例では141101であることを確認してください列 "141101"にookを入力し、値を抽出して新しい列に入れます。 low_roadsとhigh_roadsを通るループの中で。今
disturbancelist <- list(low_roads=low_roads, high_roads=high_roads) #Lists all the disturbance dataframes
for (d in disturbancelist){
##Create a column named by the current disturbance class
Class<-d$Class[2] ##calls the disturbance type
##Merge basic data and each disturbance dateframe to get the right distance values
mergeex<-merge(data_basic_DT, d, by.x = "EndId", by.y = "EndId", all.y == FALSE)
mergeexdf<-as.data.frame(mergeex)
col.names<-names(mergeexdf)
mergeexdf$distance <- mergeexdf[cbind(1:nrow(mergeexdf), fmatch(mergeexdf$dateperiod, col.names))]
names(data_basic_DT)[names(data_basic_DT)=="distance"] <- Class ##Change name of column to current disturbance class
print(Class)
}
は、私はそれを実行するためにdata.tablesで動作するようにこのコードを変更したいと思います:いくつかの助け(下記)、私はこれで、それが以前よりもずっと速く作業を持っているに
感謝もっと早く。これは、ループの外側でdata.tablesとして動作しますが、内部では動作しません。どんな助けにも感謝!
この投稿は長すぎますし、私には再現性がありませんが、私は(ブライアンの答えに基づいて)これは関連していると思います:http://stackoverflow.com/questions/33310179/select-values-from-異なる列を持つ変数を含む列名 – Frank
人がコピー&ペーストできる形式でサンプルデータを提供する必要があります(データのサブセットで正しい形式を得るには 'dput 'を使用します)。投稿タブ/スペース区切りテーブルは誰にも役立ちません。実際にサンプルコードを実行するために定義されていない変数を参照するサンプルコードを投稿することもできません。 –
ありがとう、私は質問をより鮮明に、簡潔に(うまくいけば)編集し、再現可能な例を提供しました。注:以下の回答に基づいて更新しました。 – Mel