0

我不认为这是一个很难的问题,但我根本无法弄清楚这一点并且在堆栈上找不到任何东西(希望我没有重复)。我正在尝试使用 if/else 将嵌套的 for 循环更改为 lapply 语句。我有一个数据框列表,但还没有弄清楚如何像在嵌套的 for 循环中那样访问行。我正在使用bearingDelta 列来填充一个新列表,其中的值是1 或0,具体取决于bearingDelta 列的值是大于还是小于119.9。另外,我意识到这个问题可能与我最近发布的一个问题相似,但我认为它已经足够不同了。

数据:

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 回答