[英]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.