[英]Replace values for specific variables within dataframes contained in a list - R
我的列表中包含大量數據框。 我希望用 NA 替換特定值(0),但僅適用於列表中所有數據幀中的特定變量。
我已經嘗試了下面的兩段代碼,以及 mutate 和 rapply 的幾種變體,但可惜沒有運氣。
第一段代碼和錯誤消息:
a <- lapply(list,function(x) ifelse(x, var==0,NA))
"Error in ifelse(x, var == 0, NA) :
'list' object cannot be coerced to type 'logical'"
第二段代碼 - 不返回錯誤消息,但是,將所有 0 替換為 NA 而不是特定變量。
a <- lapply(list, function(x) na_if(list[[1]],0))
在我炸毀我的大腦之前,任何人都可以提供任何幫助。
非常感謝
如果您的數據框包含在名為dfs
的列表中,那么您可以執行以下操作:
library(dplyr)
dfs <- lapply(dfs, \(df) df %>% mutate(x=if_else(x==0, as.double(NA), x)))
輸入:
dfs = list(
df1 = data.frame(x=c(0,4,3), y=c(1,2,3)),
df2 = data.frame(x=c(0,0,1), y=c(0,0,6))
)
輸出:
x y
1 NA 1
2 4 2
3 3 3
$df2
x y
1 NA 0
2 NA 0
3 1 6
如果您有一組要執行此操作的列(即不僅是 x 列,還有 y 列),您可以這樣做:
lapply(dfs, \(df) df %>% mutate(across(c(x,y), ~if_else(.x==0, as.double(NA), .x))))
或者
cols = c("x","y")
lapply(dfs, \(df) df %>% mutate(across(all_of(cols), ~if_else(.x==0, as.double(NA), .x))))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.