0

これは難しい質問ではないと思いますが、これを理解することはできず、スタック上で何も見つけることができませんでした (重複していないことを願っています)。if/else を使用して、ネストされた for ループを lapply ステートメントに変更しようとしています。データ フレームのリストがありますが、ネストされた for ループのように行にアクセスする方法がわかりません。私は、bearingDelta 列を使用して、bearingDelta 列の値が 119.9 より大きいか小さいかに応じて、新しいリストに 1 または 0 を入力しています。また、この質問は私が最近投稿した質問と似ているように見えるかもしれませんが、生きるのに十分異なると思います.

データ:

lat <- c(32.87707, 32.87708, 32.87694, 32.87726, 32.87469)
lon <- c(-117.2386, -117.2334, -117.2378, -117.2356, -117.2329)
bearingDelta <- c(180, 49, 23, 119, 129)
df <- data.frame(cbind(bearingDelta, lat, lon))
df.list <- list(df, df, df, df)

ネストされたループ:

over120 <- list()
for (i in 1:length(tripList)) {
  for (j in 1:nrow(tripList[[i]])) {
 if (tripList[[i]][j, c("bearingDelta")] <= 119.9) {
   over120[[i]][j] <- 0 }
 else {
   over120[[i]][j] <- 1 }
  }
}

lapply (このようなものを目指しています)。

over120 <- lapply(tripList, if (tripList[[i]][j, c("bearingDelta")] <= 119.9)     over120[[i]][j] <- 0 
   else over120[[i]][j] <- 1)

このサンプル データセットの目的の出力は次のようになります。

> over120
[[1]]
[1] 1  0  0  0  1

[[2]]
[1] 1  0  0  0  1

[[3]]
[1] 1  0  0  0  1

[[4]]
[1] 1  0  0  0  1
4

1 に答える 1

3

必要はありませんif:

lapply(df.list, function(x) as.integer(x$bearingDelta >= 119.9))
# [[1]]
# [1] 1 0 0 0 1
# 
# [[2]]
# [1] 1 0 0 0 1
# 
# [[3]]
# [1] 1 0 0 0 1
# 
# [[4]]
# [1] 1 0 0 0 1
于 2013-10-02T23:27:33.140 に答える