簡體   English   中英

重新編碼多個變量的 R 解決方案

[英]R Solution To Recode Multiple Variables

dataHAVE=data.frame("class"=c(1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3),
                "a"=c(0.96,0.65,0.62,0.8,0.17,0.26,0.41,0.41,0.33,0.73,0.26,0.09,0.06,0.69,0.36,0.76),
                "q"=c(0.2,0.24,0.45,0.43,0.62,0.65,0.22,0.58,0.06,0.08,0.52,0.7,0.53,0.61,0.82,0.78),
                "t"=c(0.46,0.65,0.85,0.39,0.66,0.68,0.33,0.75,0.09,0.74,0.41,0.02,0.7,0.6,0.33,0.18),
                "k"=c(0.16,0.74,0.53,0.74,0.36,0.83,0.63,0.01,0.69,0.18,0.34,0.3,0.88,0.63,0.49,0.42))




dataWANT=data.frame("class"=c(1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3),
                    "a"=c(0.96,0.65,0.62,0.8,0.17,0.26,0.41,0.41,0.33,0.73,0,0,0,0,0,0),
                    "q"=c(0.2,0.24,0.45,0.43,0.62,0.65,0.22,0.58,0.06,0.08,0,0,0,0,0,0),
                    "t"=c(0.46,0.65,0.85,0.39,0.66,0.68,0.33,0.75,0.09,0.74,0,0,0,0,0,0),
                    "k"=c(0.16,0.74,0.53,0.74,0.36,0.83,0.63,0.01,0.69,0.18,9,9,9,9,9,9))

如果 class 等於 3,我想將變量 'a'、'q' 和 't' 設置為零,將變量 'k' 設置為 9。

我的嘗試,

dataHAVE[class==3,c("a", "q", "t")] == 0
dataHAVE[class==3,c("k")] == 9

set一個選項

library(data.table)
setDT(dataHAVE)
for(nm in c("a", "q", "t") set(dataHAVE,
           i = which(dataHAVE$class ==3), j = nm, value = 0)
dataHAVE[class ==3, k := 9]

或者在.SDcols指定它並使用:=

dataHAVE[class == 3, names(dataHAVE)[-1] := 0 , .SDcols = names(dataHAVE[-1])][class ==3, k := 9][]

您可以使用:=通過引用更新值。 您需要:=的 LHS 上的名稱向量和 RHS 上的值列表(如果有多個值)。 以下任何一種都適合您!

dataHAVE[class==3,c("a", "q", "t") := 0]
dataHAVE[class==3,c("k") := 9]

或者

dataHAVE[class==3,c("a", "q", "t", "k") := .(0, 0, 0, 9)]

暫無
暫無

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

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