簡體   English   中英

如何在R中重新編碼變量

[英]How to recode variables in R

我正在嘗試在R數據框中重新編碼變量。 示例-我數據集中的變量X包含1和0。 我想創建另一個變量Y,分別將X的1和0分別編碼為Yes和No。

我試圖這樣做來創建重新編碼的Y變量:

w <- as.character()

for (i in seq_along(x))  {
    if (x[i] == 1)  {
        recode <- "Yes"
    } else if (x[i] == 0)  {
        recode <- "No"       
    }
    w <- cbind(w, recode)
}

然后,我這樣做是為了將X和Y排列在一起:

y <- c(x, y)

我回來的是:

 y
 # [1] "1"   "1"   "0"   "1"   "0"   "0"   "1"   "1"   "0"   "1"   "0"   "0"   "Yes" "Yes" "No"  "Yes" "No"  "No" 

我期待帶有X和Y列的數據框。

題:

  1. 如何將X和Y放入數據框?
  2. 有沒有更好的方法來重新編碼數據幀中的變量?

重新編碼通常是將新標簽應用於因子(分類變量)的級別

在R中,您可以這樣操作:

w <- factor(x, levels = c(1,0), labels = c('yes', 'no'))

使用以下數據:

x  <- c(rep.int(0, 10), rep.int(1, 10))
df <- as.data.frame(x)
df
#    x
# 1  0
# 2  0
# 3  0
# ...

我將創建一個新變量並一步重新編碼:

df$y[df$x == 1] <- "yes"
df$y[df$x == 0] <- "no"
df
#    x   y
# 1  0  no
# 2  0  no
# 3  0  no
# ...
# 11 1 yes
# 12 1 yes
# 13 1 yes
# ...

請注意for循環在R中並非最佳,但您的循環基本上是正確的。 您需要在循環本身w <- cbind(w, recode)替換為w <- rbind(w, recode) w <- cbind(w, recode) ,最后一步,您可以cbind xw cbind

w <- as.character()
for (i in seq_along(x))  {
  if (x[i] == 1)  {
    recode <- "Yes"
  } else if (x[i] == 0)  {
    recode <- "No"       
  }
  w <- rbind(w, recode)
}
y <- c(x, w)
y

rbind()追加行, cbind()追加列, c()將兩個字符串連接在一起,這就是為什么要將兩個列表連接在一起的原因。

這是您實際上不應在R中使用循環的眾多情況之一。

而是使用向量化,即ifelse或索引。

result = data.frame(x = x, y = ifelse(x == 1, 'yes', 'no'))

(這假定輸入中只有1和0;如果不是這種情況,則需要嵌套的ifelse或包含翻譯的列表)。

暫無
暫無

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

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