簡體   English   中英

如何在多個列中用NA有條件地替換值

[英]How to conditionally replace values with NA across multiple columns

我想用NA替換數據框每列中的離群值。

例如,如果我們將離群值定義為離均值大於3個標准差的任何值,我可以使用以下代碼實現每個變量的離群值。

我不想在一個調用中對df所有列執行相同的操作,而不是分別指定每個列。 關於如何執行此操作的任何指示?

謝謝!

library(dplyr)
data("iris")
df <- iris %>% 
  select(Sepal.Length, Sepal.Width, Petal.Length)%>% 
  head(10) 

# add a clear outlier to each variable
df[1, 1:3] = 99

# replace values above 3 SD's with NA
df_cleaned <- df %>% 
  mutate(Sepal.Length = replace(Sepal.Length, Sepal.Length > (abs(3 * sd(df$Sepal.Length, na.rm = TRUE))), NA))

您需要使用mutate_all() ,即

library(dplyr)

df %>% 
 mutate_all(funs(replace(., . > (abs(3 * sd(., na.rm = TRUE))), NA)))

另一個選擇是base R

df[] <- lapply(df, function(x) replace(x, . > (abs(3 * sd(x, na.rm = TRUE))), NA))

或與colSdsmatrixStats

library(matrixStats)
df[df > abs(3 * colSds(as.matrix(df), na.rm = TRUE))] <- NA

暫無
暫無

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

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