[英]Compare and replace values among multiple columns using a vectorized code in R
我可以找到許多關於基於閾值有條件地替換一個(或多個)列的值的問題。
但是,我要解決的是將較小(或較大)的值替換為指定值。 例如,在swiss
數據集中,我想比較最后兩列(即天主教和 Infant.Mortality)並將每行的較小值替換為 999。
> swiss[1:5, c(ncol(swiss), (ncol(swiss) - 1))]
Infant.Mortality Catholic
Courtelary 22.2 9.96
Delemont 22.2 84.84
Franches-Mnt 20.2 93.40
Moutier 20.3 33.77
Neuveville 20.6 5.16
<some code I want to write>
### the expected result
Infant.Mortality Catholic
Courtelary 22.2 999
Delemont 999 84.84
Franches-Mnt 999 93.40
Moutier 999 33.77
Neuveville 20.6 999
我想我可以使用for
語句或其他循環方法(例如 row-wise apply
)來進行比較和替換。
但是,我將處理大型數據(例如數億個觀察值),因此我想找到一種快速完成它的方法(例如矢量化數據)。
謝謝
獲取每一行的最小索引,創建一個行/列矩陣並將其替換為 999。
df[cbind(1:nrow(df), apply(df, 1, which.min))] <- 999
df
# Infant.Mortality Catholic
#Courtelary 22.2 999.00
#Delemont 999.0 84.84
#Franches-Mnt 999.0 93.40
#Moutier 999.0 33.77
#Neuveville 20.6 999.00
如果apply(df, 1....
太慢,您可以使用max.col
。
df[cbind(1:nrow(df), max.col(-df))] <- 999
數據
df <- swiss[1:5, c(ncol(swiss), (ncol(swiss) - 1))]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.