R中的if()语句

时间:2015-03-05 02:17:54

标签: r

我在R中相当新,对R中的if()语句有疑问。非常感谢任何帮助。 我的数据如下所示

Var1    var2 
01         A
02         D
03         E
04         K

我需要根据var1创建2个附加变量(Var3和Var4)。在SAS中,我将以下列方式创建var3和var4:

if var1 = 01 then do; var3 = "New York";   var4= "NYC"; end; else;
if var1 = 02 then do; var3 = "Illinois";   var4= "ORD"; end; else;
if var1 = 03 then do; var3 = "Texas";      var4= "DFW"; end; else;
if var1 = 04 then do; var3 = "New Jersey"; var4= "EWR"; end; else;

我想将上面的if语句转换为R程序。任何帮助是极大的赞赏。

3 个答案:

答案 0 :(得分:5)

var3 <- c("New York", "Illinois", "Texas", "New Jersey")[
                 match(var1, c("01","02","03","04")]
var4 <- c("NYC", "ORD", "DFW", "EWR")[
                 match(var1, c("01","02","03","04")]

通常,您将使用的项目是数据框架,而不是SAS-world中的集合。所以你会有一个数据对象名称,比如dat,你可以执行:

dat$var4 <- with( dat, c("NYC", "ORD", "DFW", "EWR")[
                 match(var1, c("01","02","03","04")] )

答案 1 :(得分:2)

我对自己施加的基本R规则是存储您可能必须在适当的结构中调用的数据(例如 - vector s用于一系列值,list s用于相关系列不等长度的值,data.frame s用于相关的等长系列等等。)

因此,在这种情况下,适当的结构是相同长度的相关系列的data.frame。 E.g:

srcs <- data.frame(
  Var1=c("01","02","03","04"),
  state=c("New York", "Illinois", "Texas", "New Jersey"),
  code=c("NYC", "ORD", "DFW", "EWR")
)

然后使用该基本信息存储来适当添加新变量,例如:

dat <- cbind(dat, srcs[c("state","code")][match(dat$Var1,srcs$Var1),] )

#  Var1 var2      state code
#1   01    A   New York  NYC
#2   02    D   Illinois  ORD
#3   03    E      Texas  DFW
#4   04    K New Jersey  EWR

这会将一大堆if / else语句转换为单个调用,并且无需进行丑陋的循环操作。

答案 2 :(得分:0)

另一个解决方案是使用ifelse(假设var1只有四个值)。

mydata$var3<- with (mydata, ifelse(var1 =="01", "New York" ,
              ifelse (var1 == "02", "Illinois",
              ifelse (var1 == "03","Texas" ,"New Jersey" ))))

mydata$var4<-with (mydata, ifelse (var1 =="01", "NYC",
        ifelse (var1 == "02","ORD",
      ifelse (var1 == "03", "DFW","EWR"))))