if / else语句使用lapply迭代R中数据帧列表中的行

时间:2013-10-02 23:14:02

标签: r if-statement nested-loops lapply

我认为这不是一个难题,但我根本无法解决这个问题,也无法在堆栈上找到任何东西(希望我不会重复)。我正在尝试使用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

1 个答案:

答案 0 :(得分: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