2014-09-03 32 views
1

真正的R程序员如何用冗余步骤编写代码块?在这里,我复制/粘贴/编辑每一行,这对于这个小的分析来说工作得很好,但对于较大的分析来说却很笨拙。在SAS中,我会编写宏。在R中寻找生成原理。重构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") 

回答

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 ING步骤。

(这将有助于你给出一个可重复的例子。)

+0

这很好。我看到生成原理是使用R来将列名称表示为R向量本身,使用R作为它自己的宏语言。在这种情况下,技巧是定义一个数据框只需要一列。 – prototype 2014-09-11 13:35:11