存储数据点的两个字符串列 - 一个接一个访问
Posted
技术标签:
【中文标题】存储数据点的两个字符串列 - 一个接一个访问【英文标题】:Two string columns with stored datapoints - access one by the other 【发布时间】:2021-08-30 07:34:28 【问题描述】:我有一个数据框,基本上有两列,一列是“日期”,另一列是“疾病等级”。
它们的编码如下:
Date | Grade |
---|---|
2017-10-14=&=2018-01-20=&==&= | 1=&=2=&==&= |
2018-10-14=&=2019-01-20=&=2020-01-01=&= | 2=&=3=&=4=&= |
我寻找一个代码来访问与第二列中的成绩相对应的第一列中的日期。 此外,如果能够提取日期,例如疾病等级为2第一次。
我尝试了 str_split(... sep = "=&=) 并最终得到一个包含所有不同日期和等级的矩阵。
我需要提取以下内容:
-
用于时变分析
Follow_up_1 | Grade_1 | Follow_up_2 | Grade_2 | Follow_up_3 | Grade_3 |
---|---|---|---|---|---|
2017-10-14 | 1 | 2018-01-20 | 2 | NA | NA |
2018-10-14 | 2 | 2019-01-20 | 3 | 2020-01-01 | 4 |
-
max_grade 和 max_grade 的日期
Date_max_grade | Max_grade |
---|---|
2018-01-20 | 2 |
2020-01-01 | 4 |
-
提取第一个日期,其中对应的等级是 3 或 4。
First_Date_3_or_4 |
---|
NA |
2019-01-20 |
2020-01-01 |
提前致谢,
一月
【问题讨论】:
【参考方案1】:数据:
df <- tribble(
~Date, ~Grade,
"2017-10-14=&=2018-01-20=&==&=", "1=&=2=&==&=",
"2018-10-14=&=2019-01-20=&=2020-01-01=&=", "2=&=3=&=4=&="
)
设置:
library(tidyverse)
df <- df %>%
mutate(
across(everything(), ~str_split(.x, pattern = "=&=") %>% map(~.x[.x != ""]))
) %>%
pmap(~data.frame(...)) %>%
imap_dfr(~mutate(.x, group = .y, group_id = row_number())) %>%
mutate(
Grade = as.integer(as.character(Grade)),
Date = as.Date(Date)
)
第一个问题:
df %>%
pivot_wider(
id_cols = group,
names_from = group_id,
names_glue = ".value_group_id",
values_from = c(Date, Grade)
) %>%
select(-group)
第二个问题:
df %>%
group_by(group) %>%
filter(Grade == max(Grade)) %>%
ungroup() %>%
select(Date, Grade)
第三个问题:我不确定你到底想要什么
df %>%
group_by(group, Grade) %>%
filter(Grade %in% c(3, 4)) %>%
ungroup() %>%
select(-group_id) %>%
right_join(data.frame(group = unique(df$group)), by = "group")
【讨论】:
谢谢!一旦我再次处理代码部分,我将更新帖子。以上是关于存储数据点的两个字符串列 - 一个接一个访问的主要内容,如果未能解决你的问题,请参考以下文章
从数据框字符串列中提取特定单词并存储在 Python 的新列中