使用seq_along,粘贴以循环重新编码

时间:2011-12-06 07:03:08

标签: r

当重新编码一组都具有相同格式的变量时,我想在循环中这样做以节省时间,但结果似乎让我感到厌烦。

考虑以下示例

d1 <- data.frame(x1 = 1:4,
                 x2 = 1:4)

我想使用汽车库中的recode分配一组新的变量,y1y2,但我不想手工完成。

我的婴儿方法是

library(car)
var_list <- c("x1", "x2")
for(i in seq_along(var_list)) {
assign(paste("d1$y", match(i, var_list)], sep = ""),
       recode(d1$i, "1:2 = 'a';3:4 = 'b'"))}

我正在尝试遍历var_list,然后使用assignpaste对变量d1$y1d1$y2进行编号。使用recode对于该包是常规的而不是我的错误的来源(我想象!)

我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

这是一种更“R-ish”的方法仍然使用recode()

d2 <- lapply(d1, FUN=function(X) recode(X, "1:2 ='a'; 3:4 = 'b'"))
names(d2) <- gsub("x", "y", names(d2))
d1 <- data.frame(d1,d2)
d1
#  x1 x2 y1 y2
# 1  1  1  a  a
# 2  2  2  a  a
# 3  3  3  b  b
# 4  4  4  b  b

答案 1 :(得分:2)

没有plyr

vn1 <- names(d1)
vn2 <- gsub("x","y")

d2 <- data.frame(lapply(structure(.Data=vn1, .Names=vn2), 
                        FUN=function(X) recode(d1[[X]], "1:2 ='a'; 3:4 = 'b'")))

使用plyr

d2 <- colwise(recode)(d1,recodes="1:2 ='a'; 3:4 = 'b'")
names(d2) <- vn2