![](/img/trans.png)
[英]How to index the features() function to iterate over a list of data frames using map() function in R?
[英]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_z
在position
的 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_z
和list_x
中的行順序相同(list_z 中 dfs 的第一行轉到list_z
中 dfs 的第一行,依此類推),因此list_x
將list_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.