在R中重构重复代码的提示

时间:2014-09-03 18:06:29

标签: r coding-style

真正的R程序员如何使用冗余步骤编写代码块?在这里,我复制/粘贴/编辑每一行,这对于这个小分析工作正常,但对于较大的分析,它会变得笨拙。在SAS中,我写了宏。寻找R。

中的生成原则

此示例具有一些典型模式,例如重新编码一组连续的列和/或具有编号模式。此外,重新编码逻辑只是"将NA替换为0,然后添加1"作为另一种期望输入变量正整数的算法的输入,这里使用car库。

data$rs14_1 <- recode(data$q14_1,"5=6;4=5;3=4;2=3;1=2;0=1;NA=0")
data$rs14_2 <- recode(data$q14_2,"5=6;4=5;3=4;2=3;1=2;0=1;NA=1")
data$rs14_3 <- recode(data$q14_3,"5=6;4=5;3=4;2=3;1=2;0=1;NA=1")
data$rs14_4 <- recode(data$q14_4,"5=6;4=5;3=4;2=3;1=2;0=1;NA=1")
data$rs14_5 <- recode(data$q14_5,"5=6;4=5;3=4;2=3;1=2;0=1;NA=1")
data$rs14_6 <- recode(data$q14_6,"5=6;4=5;3=4;2=3;1=2;0=1;NA=1")
data$rs14_7 <- recode(data$q14_7,"5=6;4=5;3=4;2=3;1=2;0=1;NA=1")
data$rs14_8 <- recode(data$q14_8,"5=6;4=5;3=4;2=3;1=2;0=1;NA=1")
data$rs14_9 <- recode(data$q14_9,"5=6;4=5;3=4;2=3;1=2;0=1;NA=1")

1 个答案:

答案 0 :(得分:3)

假设第一行中的重新编码应该与其余部分相同:

重新编码所有数据列,创建一个新数据框作为结果:

newdata <- lapply(data,recode,"5=6;4=5;3=4;2=3;1=2;0=1;NA=0")

根据旧数据框设置新数据框的名称:

names(newdata) <- gsub("^q","rs",names(newdata))

把它们放在一起:

data <- cbind(data,newdata)

但实际上,您可能应该使用:

newdata <- data
newdata[is.na(newdata)] <- 0
newdata <- newdata+1

(而不是recode)进行转换,然后重命名和cbind步骤。

(如果你给出了一个可重复的例子,那会很有帮助。)