找到第一个值并根据结果创建新变量

时间:2016-04-28 07:22:24

标签: r loops if-statement for-loop dataframe

我的数据框有184个obs。 5个变量:

'data.frame':   184 obs. of  5 variables:
     $ Cat     : Factor w/ 10 levels "99-001","99-002",..: 1 1 1 1 1 1 1 1 1 1 ...
     $ No      : int  1 1 1 1 1 1 1 1 1 1 ...
     $ ehs     : int  0 0 0 0 0 0 0 0 0 0 ...
     $ Onset   : int  0 0 0 0 0 0 0 9 9 9 ...
     $ STARTING: Factor w/ 149 levels "1:37PM1","1:42PM1",..: 3 4 5 63 64 65 66 67... 

数据框来自重复测量研究,这意味着每个案例都进行了多次测量:

现在我想通过判断每个病例的发病情况来创建一个新的变量(激怒)。如果发病是" 0"首先,新变量(provoke)将编码为" 0"否则" 1"。
我的R剧本:

no1 <- seq[seq$No == 1, ]
if (no1[1,4]==0) {no1$provoke =0} else {no1$provoke =1}
no2 <- seq[seq$No == 2, ]
if (no2[1,4]==0) {no2$provoke = 0} else {no2$provoke = 1}    

对于大案例编号,我打算写一个循环来完成任务

 for (i in 1:10) {    
 noi <- seq[seq$No == i, ]    
 if (noi[1,4]==0) {    
 noi$provoke = 0}     
 else {noi$provoke = 1}    
}

但循环似乎没有运作。你能帮我找出错误或指出我的错误吗?

1 个答案:

答案 0 :(得分:1)

href='Item.jpage?item=A4710102800'是一个非常糟糕的名称,可以选择data.frame。对于这个例子,我们称之为seq

xy

另一种解决方法如下。这假设数据按xy <- data.frame(case = rep(1:5, each = 10), oldvar = rbinom(50, size = 1, prob = 0.5)) xy.split <- split(xy, f = xy$case) manipulateXY <- function(x) { if (x[1, "oldvar"] == 0) { x$newvar <- 0 } else { x$newvar <- 1 } x } xy.newvar <- lapply(xy.split, FUN = manipulateXY) xy.new <- do.call("rbind", xy.newvar) xy.new 排序。

case