簡體   English   中英

如何根據 R 中的另一個變量條件使用 else=copy 選項一次重新編碼多個變量?

[英]How to recode multiple variables at once with an else=copy option depending on another variables condition in R?

讓我們看一個例子。

library(sjmisc)
data(efc)

從這個數據集中,我想重新編碼名稱包含cop (所以我可以使用 tidyselect contains )的所有變量,如下所示。 對於男性 ( e16sex==1 ) NA999else=copy (就像我可以用sjmisc::rec(..., rec = "NA=999; else=copy" );對於女性( e16sex==2 ) 保持它們完好無損。

我嘗試通過dplyr (和sjmisc )進行下一個幼稚的測試:

mutate_at(efc, vars(contains("cop")), list(~if_else(e16sex == 1, rec(., rec="NA=999; else=copy"),.)))

但是,可以理解的是, if_else不處理第二個點. 就好像它是原始的contains("cop") e16sex != 1行的變量。

我正在尋找一個函數(或復合)返回一個指定了重新編碼的數據幀(所以,請避免for )。 我無法嘗試使用data.table因為我還不知道該語言,但歡迎所有有效(和高效)的解決方案。 也許可以用purrr來完成?

謝謝!

更新

上面的簡單測試有效。 我沒有在這個例子中嘗試過它,但使用了iris數據集,並使用Species變量而不是cop變量。 由於Species是一個因素,試圖通過一個新的水平來改變它的一些水平會產生NA ,因此我感到困惑。

我不確定我是否完全理解這個問題,但是您可以為此使用 for 循環:

for(x in grep( "cop",names(efc))) { 
   efc[!is.na(efc$e16sex) & efc$e16sex==1 & is.na(efc[,x]),x] <- 999 
   }

暫無
暫無

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

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