根据其他列中值的大小创建新变量

222

我正在尝试使用名为'epi'(代表情节)的新变量创建df ...,该变量基于'days.since.last'变量。当“ days.since.last”的值大于90时,我希望情节变量增加1。

这是原始的df

   deid session.number days.since.last
1     1              1               0
2     1              2               7
3     1              3              12
4     5              1               0
5     5              2               7
6     5              3              14
7     5              4              93
8     5              5               5
9     5              6             102
10   12              1               0
11   12              2              21
12   12              3             104
13   12              4               4

创建于

help <- data.frame(deid = c(1, 1, 1, 5, 5, 5, 5, 5, 5, 12, 12, 12, 12),
                   session.number = c(1, 2, 3, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4),
                   days.since.last = c(0, 7, 12, 0, 7, 14, 93, 5, 102, 0, 21, 104, 4))

这是我希望实现的输出

   deid session.number days.since.last epi
1     1              1               0   1
2     1              2               7   1
3     1              3              12   1
4     5              1               0   1
5     5              2               7   1
6     5              3              14   1
7     5              4              93   2
8     5              5               5   2
9     5              6             102   3
10   12              1               0   1
11   12              2              21   1
12   12              3             104   2
13   12              4               4   2

我最好的尝试是下面的代码,但是,它不会更改每个新情节的第一个值(它们保持为0)...

help$epi <- as.numeric(0)

tmp <- gapply(help, form = ~ deid, FUN = function(x)
{     
  spanSeq <- rle(x$days.since.last <= 90)$lengths[rle(x$days.since.last <= 90)$values == TRUE] 
  x$epi[x$days.since.last <= 90] <- rep(seq_along(spanSeq), times = spanSeq)
  rm(spanSeq)
  x    
})
help2 <- do.call("rbind", tmp)
rownames(help2)<-c(1:length(help2$deid))

非常感谢您的协助!

牙买加的

您可以这样操作dplyr

library(dplyr)
help %>% group_by(deid) %>% mutate(epi = cumsum(ifelse(days.since.last>90,1,0))+1)


   deid session.number days.since.last epi
1     1              1               0   1
2     1              2               7   1
3     1              3              12   1
4     5              1               0   1
5     5              2               7   1
6     5              3              14   1
7     5              4              93   2
8     5              5               5   2
9     5              6             102   3
10   12              1               0   1
11   12              2              21   1
12   12              3             104   2
13   12              4               4   2

从本质上讲,group_by将按组对“ deid”变量进行所有操作。我们为超过90的每个“ days.since.last”分配1或0。然后我们创建一个新变量,该变量是这些1和0的累加和。通过添加一个,我们得到您想要的结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用R根据其他列创建新变量

来自分类Dev

R:如何根据其他列的名称创建新变量

来自分类Dev

使用R根据其他列创建新变量

来自分类Dev

awk 根据其他列的条件创建新变量

来自分类Dev

根据其他几个变量的值创建新变量

来自分类Dev

根据组中其他列中至少一个变量的出现创建新列

来自分类Dev

根据其他列中值的唯一组合分配新列

来自分类Dev

根据其他列中的NA值创建新列

来自分类Dev

根据R中其他列的位置创建新列

来自分类Dev

Python-根据其他列的条件创建新列

来自分类Dev

根据其他列的条件创建新列

来自分类Dev

熊猫根据其他两列的划分创建新列

来自分类Dev

根据其他列在Pandas DataFrame中创建新列

来自分类Dev

根据其他列创建新列,但要剥离

来自分类Dev

根据r中的其他列创建新列

来自分类Dev

SQL根据其他两列创建新列

来自分类Dev

根据其他列中的值创建新列

来自分类Dev

根据涉及其他列的公式创建新列

来自分类Dev

根据其他行中的重复项创建新列

来自分类Dev

根据其他变量的条件在数据表中创建新变量

来自分类Dev

根据在r中包含特定值的其他变量创建一个新变量

来自分类Dev

根据R中其他两个变量之间的数值差异创建新变量

来自分类Dev

R:根据其他名称相似的变量的选择条件创建多个新变量

来自分类Dev

根据可能存在于多个其他变量中的值创建新的Stata变量

来自分类Dev

根据其他三个变量之间的比较创建新变量

来自分类Dev

根据在r中包含特定值的其他变量创建一个新变量

来自分类Dev

根据索引位置和其他变量的值创建新变量

来自分类Dev

根据其他外部函数创建变量

来自分类Dev

SAS根据其他变量创建ID

Related 相关文章

热门标签

归档