微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据另一列的数值创建新列

如何解决如何根据另一列的数值创建新列

我有 1000 多名参与者的 df (chpt4),以及测试的日期。我想根据随访 (t1:t4) 和基线 (t0) 之间经过的月数来调整日期。为此,我创建了 4 个额外的列 (difft0t2:difft0t4),以精确显示测试之间经过的月份。图像就是我现在所拥有的。

this is what i have

我将月份分为 5 个不同的类别:(我还认为这个向量可以帮助我作为计数器)

FU6 <- 1:9
FU12 <- 10:18 
FU24 <- 19:30
FU36 <- 31:42
FU48 <- 43:54

我最初的想法是使用 difft0t1

开始索引属于上述范围的 which() 列的值
which(chpt4$difft0t1 %in% c(FU6)) #this works

which(chpt4$difft0t1 %in% c(FU14)) #this doesn't work at all 

...并使用该结果编号,作为将哪个元素粘贴到另一列中的索引。它只是不起作用。

与第 243 和 244 行的图像示例保持一致,我希望结果列如下所示:

基线 FU6 FU12 FU24 FU36 FU48
2012-02-24 不适用 2013-09-06 2014-02-21 2015-06-23 不适用
2012-05-24 不适用 2013-05-16 不适用 2015-04-20 2016-05-12

解决方法

我认为你需要这个

library (tidyverse)
df %>% pivot_longer(cols = -id,names_to = "Test",values_to = "Dates") %>%
  group_by(id) %>% mutate(new_col = as.numeric(round((Dates - first(Dates))/30,0))) %>%
  mutate(new_col = case_when(new_col == 0 ~ "Baseline",new_col %in% 1:9 ~ "FU6",new_col %in% 10:18 ~ "FU12",new_col %in% 19:30 ~ "FU24",new_col %in% 31:42 ~ "FU36",new_col %in% 43:54 ~ "FU48")) %>% filter(!is.na(new_col)) %>%
  select(-Test) %>% pivot_wider(id_cols = "id",names_from = "new_col",values_from = "Dates",values_fn = min)
  
# A tibble: 4 x 6
# Groups:   id [4]
  id     Baseline   FU12       FU24       FU36       FU48      
  <chr>  <date>     <date>     <date>     <date>     <date>    
1 waa000 2012-10-04 2013-09-05 NA         NA         NA        
2 waf84  2012-02-24 NA         2013-09-06 2015-06-23 NA        
3 waq593 2012-05-24 2013-05-16 NA         2015-04-20 2016-05-12
4 wcu776 2013-01-24 2014-01-23 NA         NA         NA       

注意 每当一组中有两个日期时,将显示最小/第一个日期。 FU6 类别将在使用适当的数据后自动出现在图片中。 使用的样本数据

dput(df)

> dput(df)
structure(list(id = c("waa000","waf84","waq593","wcu776"),t0 = structure(c(15617,15394,15484,15729),class = "Date"),t1 = structure(c(15953,15954,15841,16093),t2 = structure(c(NA,16122,16545,NA),t3 = structure(c(NA,16609,16933,t4 = structure(c(NA_real_,NA_real_,NA_real_),class = "Date")),row.names = c(NA,-4L),class = "data.frame")

> df
      id         t0         t1         t2         t3   t4
1 waa000 2012-10-04 2013-09-05       <NA>       <NA> <NA>
2  waf84 2012-02-24 2013-09-06 2014-02-21 2015-06-23 <NA>
3 waq593 2012-05-24 2013-05-16 2015-04-20 2016-05-12 <NA>
4 wcu776 2013-01-24 2014-01-23       <NA>       <NA> <NA>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。