如何基于另一列的数值创建新列

宝琳娜

我有一个chpt4包含1000多个参与者的df(),以及进行测试的日期。我想根据随访(t1:t4)和基准(t0之间经过了多少个月来安排日期为此,我另外创建了4列(difft0t2:difft0t4),以显示两次测试之间经过的月数。图像就是我现在所拥有的。

这就是我所拥有的

我将月份分为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
阿尼尔·戈亚尔(AnilGoyal)

我想你需要这个

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), class = "Date"), 
    t2 = structure(c(NA, 16122, 16545, NA), class = "Date"), 
    t3 = structure(c(NA, 16609, 16933, NA), class = "Date"), 
    t4 = structure(c(NA_real_, 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>

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何基于另一列创建新的列?

如何根据另一列 SQL 中的值创建具有计数值的新列

R - 基于另一列差异创建新列

基于 < 或 >= R 中另一列的数值创建非数值列

如何创建基于同一行中另一列的值命名的新列?

R:如何创建一个基于另一列某些值的新列?

如何基于字典和另一列之间的匹配项创建新的df列

数据框,使用基于另一列索引的值创建一个新列

在数据框中创建基于条件和另一列值的新列

基于另一列的条件子字符串创建新的 df 列

R使用函数基于另一列创建新列

在R是/否的基础上基于另一列创建新列

DataFrame:基于另一列中的单词创建新列

基于另一列生成新列

熊猫基于拆分另一列添加新列

基于另一列添加新列

如何在基于SQL的另一列一个IF参数创建从一列两列

就最低的计算复杂度而言,如何创建一个新的pandas列,该列将基于另一列增加一定数量

使用grepl创建基于另一列的列

如何添加基于熊猫中另一列的值的新列

如何基于另一列中的值将值移到新列中

如何基于R中另一列中的最高编号来计算新列?

如何基于带有日期的另一列创建Pandas列?

如何基于另一列创建一列范围为1-4的虚拟变量?

Groupby + 来自另一列的条件以创建新列

根据另一列的值创建新列

从Python中的另一列创建新列

从R中的另一列创建新列

根据另一列的值创建新列