我的数据框有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}
}
但循环似乎没有运作。你能帮我找出错误或指出我的错误吗?
答案 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