簡體   English   中英

替換列表中包含的數據框中特定變量的值 - R

[英]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.

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