簡體   English   中英

R:如何一次重新編碼多個變量

[英]R: How to recode multiple variables at once

我的數據集中有幾個變量需要以完全相同的方式重新編碼,還有幾個其他變量需要以不同的方式重新編碼。 我嘗試編寫一個函數來幫助我解決這個問題,但我遇到了麻煩。

library(dplyr)
recode_liberalSupport = function(arg1){
  arg1 = recode(arg1, "1=-1;2=1;else=NA")
  return(arg1)
}

liberals = c(df$var1, df$var4, df$var8)
for(i in unique(liberals)){
  paste(df$liberals[i] <- sapply(liberals, FUN = recode_liberalSupport))
}

R studio 在這方面工作了大約 5 分鍾,然后給了我這個錯誤信息:

Error in `$<-.data.frame`(`*tmp*`, liberals, value = c(NA_real_, NA_real_,  : 
  replacement has 9 rows, data has 64600
In addition: Warning messages:
1: Unknown or uninitialised column: 'liberals'. 
2: In df$liberals[i] <- sapply(liberals, FUN = recode_liberalSupport) :
  number of items to replace is not a multiple of replacement length

任何幫助將非常感激! 謝謝

我認為這更整潔dplyr 正確使用recode是個好主意。 mutate_all()可用於對整個數據幀進行操作, mutate_at()僅對選定的變量進行操作。 有很多方法可以在dplyr 中指定變量。

mydata <- data.frame(arg1=c(1,2,4,5),arg2=c(1,1,2,0),arg3=c(1,1,1,1))

mydata

  arg1 arg2 arg3
1    1    1    1
2    2    1    1
3    4    2    1
4    5    0    1

mydata <- mydata %>% 
     mutate_at(c("arg1","arg2"), funs(recode(., `1`=-1, `2`=1, .default = NaN)))

mydata

  arg1 arg2 arg3
1   -1   -1    1
2    1   -1    1
3  NaN    1    1
4  NaN  NaN    1

我使用 NaN 而不是 NA 因為它是數字,在其他數字的列中管理起來更簡單。

與往常一樣,有很多方法可以做到這一點。 我不太了解 dplyr 以使用該功能,但這似乎是您正在尋找的。

mydata <- data.frame(arg1=c(1,2,4,5),arg2=c(1,1,2,0))
mydata
  arg1 arg2
1    1    1
2    2    1
3    4    2
4    5    0

使用嵌套ifelse()重新編碼的函數

recode_liberalSupport <- function(var = "arg1", data=mydata) {
+   recoded <- ifelse(mydata[[var]] == 1, -1,
+                           ifelse(mydata[[var]] == 2, 1, NA))
+   return(recoded)
+ }

調用函數

recode_liberalSupport(var = "arg1")
[1] -1  1 NA NA

用重新編碼的值替換變量arg1

mydata$arg1 <- recode_liberalSupport(var = "arg1") 
mydata
  arg1 arg2
1   -1    1
2    1    1
3   NA    2
4   NA    0

暫無
暫無

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

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