【问题标题】:mutate new continuous variable in dplyr在 dplyr 中改变新的连续变量
【发布时间】:2017-04-20 08:52:43
【问题描述】:

我有一个随着时间的推移生物标志物 x 浓度下降的患者的数据集。我试图找到第一次峰值 x 的百分比低于 25%,或者 x 的绝对值低于男性的 34 或女性的 16。我已经完成了 % 部分:

df25 <- df %>% group_by(id) %>% summarise(x_25 = which(x_frac <=25)[1])

但我想知道如何将绝对值组合到此中?我尝试了以下方法,但它不起作用:

df25a <- df %>% group_by(id) %>% 
  mutate(x_25a = ifelse(x_frac>=25 & x<=34, day, NA))

我将非常感谢您的专业知识,bw Annemarie

id  day x   x_frac  sex    "hoped for x_25"
1   0   1935    100 0                 2
1   1   1039    54  0                 2
1   2   308     16  0                 2
1   3   112     6   0                 2  
2   0   31      100 1                 1  
2   1   11      35  1                 1   
3   0   204     100 0                 NA   
3   1   178     87  0                 NA    

【问题讨论】:

  • 你能显示你的预期输出吗
  • @akrun 我已经在我的问题中添加了一个“希望的”输出,谢谢
  • 不应该小于25,x_frac&lt;=25吗?
  • @timfaber。我正在寻找浓度第一次降至 25% 。错过这一步会更优雅...谢谢

标签: r dplyr


【解决方案1】:

您的代码似乎有道理,也许是这样的? (我认为这与您希望的 col 不符,但符合您的描述)

df25a <- df %>% group_by(id) %>% 
  mutate(x_25a = ifelse(sex==0,ifelse(x_frac<=25 | x<=34, day, NA),
                               ifelse(x_frac<=25 | x<=16, day, NA)))

还有总结版:

df25 <- df %>% group_by(id) %>% summarise(x_25 = ifelse(sex[1]==0,which(x_frac <=25 | x<=34)[1],
                                                                  which(x_frac <=25 | x<=16)[1]))

【讨论】:

  • 是的,太好了,谢谢。是否可以为每个患者选择 x_25a 的第一个非 NA 值?我尝试了以下方法,但如果第一个值是 NA,那么它会使整个患者 NA。谢谢df %&gt;% group_by(id) %&gt;% mutate(x_25b = first(x_25a))
  • 我添加了一个生成索引的摘要版本(从而丢弃了 NA)。这对你有用吗?
猜你喜欢
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-11
相关资源
最近更新 更多