簡體   English   中英

Map function 迭代列表

[英]Map function to iterate over list

用戶,

將第 N 行的 NA 行插入到帶有 N 來自列表的數據幀列表中,我收到了有關使用循環和 Map 功能的幫助。 在我在那里獲得幫助之后,我目前正在嘗試解決類似的問題 - 但我再次陷入困境(在 SO 和其他地方花費時間搜索之后)

以下是一些示例數據來說明我的問題:

df_z_one <- data.frame(1:2,4:5,7:8)
df_z_two <- data.frame(10:11,13:14,16:17)
list_z <- list(df_z_one,df_z_two)
df_x_one <- data.frame(c(NA,1,NA),c(NA,2,NA),c(NA,3,NA))
df_x_two <- data.frame(c(2,NA,NA),c(3,NA,NA),c(4,NA,NA))
list_x <- list(df_x_one,df_x_two)
position <- list(c(1,3),c(2,3))

我需要的是一個 function ,它將 list_x 的數據幀中的 NA 行替換為list_x中的行, list_zposition的 dfs 中指定行list_x 我嘗試使用以下 function:

Map(function(x,y,z){for(i in y){x[i,]<-z[i,]};x},x=list_x,y=position,z=list_z)

此 function 僅更改第 n 行list_x的每個 df 中的第一個行號(由position指定)。 我希望它更改position指定的所有行。 另一種選擇是,由於list_zlist_x中的行順序相同(list_z 中 dfs 的第一行轉到list_z中 dfs 的第一行,依此類推),因此list_xlist_x中的 NA 行替換為 rows來自list_x 這樣的 function 將使position不必要。

我必須提到,要替換的行數在數據幀之間會有所不同。

最良好的祝願/約翰

單線將做:

Map(function(x, z, i) {x[i, ] <- z; x}, list_x, list_z, position)
#[[1]]
#  c.NA..1..NA. c.NA..2..NA. c.NA..3..NA.
#1            1            4            7
#2            1            2            3
#3            2            5            8
#
#[[2]]
#  c.2..NA..NA. c.3..NA..NA. c.4..NA..NA.
#1            2            3            4
#2           10           13           16
#3           11           14           17

訣竅是查看如何使用列表的成員之一執行此操作,然后嘗試概括該代碼:

df_x_one[position[[1]],] <- df_z_one
df_x_one

注意上面的第二行很重要,它對應於Map指令中分號后的x data.frame x必須返回給調用者,否則它只會在 Map 調用的匿名Map內部發生變化。

暫無
暫無

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

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