簡體   English   中英

r 使用 lapply 函數在每個列表中綁定數據幀

[英]r rbind dataframes in each list using lapply function

我想添加一些數據點。 odtl是原始數據, adtl是要添加的數據點。 adtl設置為 NA 但將在rbind之后由zoo :: na.spline進行插值。
在此過程中,兩個列表( odtladtl )分別包含三個數據幀。 我想按照加載到每個列表中的順序組合數據框。 我使用for函數成功了這一點,如下所示。 但是我的lapply功能不起作用。 lapply這個循環作為一個lapplyapply家庭功能嗎? 謝謝。

> odtl # original dataset
[[1]]
  x index
1 1     1
2 2     2
3 3     3
4 4     4
5 5     5

[[2]]
  x index
1 1     1
2 2     2
3 3     3
4 4     4

[[3]]
  x index
1 1     1
2 2     2
3 3     3

> adtl # dataset for add
[[1]]
   x index
1 NA   1.5

[[2]]
   x index
1 NA   1.5
2 NA   2.5
3 NA   3.5

[[3]]
   x index
1 NA   1.5
2 NA   2.5

> wdtl <- list() # This is the goal.
> for(i in 1:length(odtl)){
+   wdtl[[i]] <- rbind(odtl[[i]], adtl[[i]])
+ }
> wdtl # This is the goal but I want complete it by lapply or something
[[1]]
   x index
1  1   1.0
2  2   2.0
3  3   3.0
4  4   4.0
5  5   5.0
6 NA   1.5

[[2]]
   x index
1  1   1.0
2  2   2.0
3  3   3.0
4  4   4.0
5 NA   1.5
6 NA   2.5
7 NA   3.5

[[3]]
   x index
1  1   1.0
2  2   2.0
3  3   3.0
4 NA   1.5
5 NA   2.5

您可以使用Map() ,它按元素將函數應用於其每個參數的第一個元素。

Map(rbind, odtl, adtl)
# [[1]]
# x index
# 1   1   1.0
# 2   2   2.0
# 3   3   3.0
# 4   4   4.0
# 5   5   5.0
# 6  NA   1.5
# 7  NA   2.5
# 8  NA   3.5
# 9  NA   4.5
# 10 NA   5.5
# 
# [[2]]
# x index
# 1  1   1.0
# 2  2   2.0
# 3  3   3.0
# 4  4   4.0
# 5 NA   1.5
# 6 NA   2.5
# 7 NA   3.5
# 8 NA   4.5
# 
# [[3]]
# x index
# 1  1   1.0
# 2  2   2.0
# 3  3   3.0
# 4 NA   1.5
# 5 NA   2.5
# 6 NA   3.5

數據

odtl  <- list(data.frame(x=1:5, index=1:5),
              data.frame(x=1:4, index=1:4),
              data.frame(x=1:3, index=1:3))
adtl  <- list(data.frame(x=NA, index=seq(1.5, 5.5, 1)),
              data.frame(x=NA, index=seq(1.5, 4.5, 1)),
              data.frame(x=NA, index=seq(1.5, 3.5, 1)))

我認為@thelatemail 評論中的解決方案應該是最優雅的解決方案。 如果你想使用lapply ,那么下面就是你想要的東西

wdtl <- sapply(seq(odtl), function(k) rbind(odtl[[k]],adtl[[k]]))

特別是從lapplyapply等系列函數,您可以使用mapply

> odtl  <- list(data.frame(x=1:5, index=1:5),
                data.frame(x=1:4, index=1:4),
                data.frame(x=1:3, index=1:3))
> adtl  <- list(data.frame(x=NA, index=seq(1.5, 5.5, 1)),
                data.frame(x=NA, index=seq(1.5, 4.5, 1)),
                data.frame(x=NA, index=seq(1.5, 3.5, 1)))v
> mapply(rbind, odtl, adtl, SIMPLIFY = FALSE)
# [[1]]
#     x index
# 1   1   1.0
# 2   2   2.0
# 3   3   3.0
# 4   4   4.0
# 5   5   5.0
# 6  NA   1.5
# 7  NA   2.5
# 8  NA   3.5
# 9  NA   4.5
# 10 NA   5.5
# 
# [[2]]
#    x index
# 1  1   1.0
# 2  2   2.0
# 3  3   3.0
# 4  4   4.0
# 5 NA   1.5
# 6 NA   2.5
# 7 NA   3.5
# 8 NA   4.5
# 
# [[3]]
#    x index
# 1  1   1.0
# 2  2   2.0
# 3  3   3.0
# 4 NA   1.5
# 5 NA   2.5
# 6 NA   3.5

請注意, Mapmapply(FUN = f, ..., SIMPLIFY = FALSE)的包裝器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM