используя seq_along, вставьте для перекодирования в цикле - PullRequest
2 голосов
/ 06 декабря 2011

при перекодировании набора переменных, которые имеют одинаковый формат, я хотел бы сделать это в цикле, чтобы сэкономить время, но результат, кажется, ускользает от меня.

рассмотрим следующий пример

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

Я хочу использовать recode из автомобильной библиотеки, чтобы назначить новый набор переменных, y1 и y2, но я не хочу делать это вручную.

мой инфантильный подход -

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, а затем использовать assign и paste для нумерации переменных d1$y1 и d1$y2.Использование recode является общепринятым для этого пакета, а не источником моей ошибки (я думаю!)

что я здесь не так делаю?

Ответы [ 2 ]

3 голосов
/ 06 декабря 2011

Вот более подход "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
2 голосов
/ 06 декабря 2011

без плир

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'")))

С плиром

d2 <- colwise(recode)(d1,recodes="1:2 ='a'; 3:4 = 'b'")
names(d2) <- vn2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...