如何解决r 数据转换单独的列
我有一个包含两列三列的数据集。第三列的日期值与一些字符串混合在一起。
ID Col1 Value
123 Start.Date 2011-06-18
123 stem A1
123 stem_1 A6
123 stem_2 NA
321 Start.Date 2014-08-05
321 stem C1
321 stem_1 C4
321 stem_2 NA
677 Start.Date NA
677 stem NA
677 stem_1 NA
677 stem_2 NA
如何分离日期并将它们存储在像这样的不同列中?
ID Col1 Value Start.Date
123 stem A1 2011-06-18
123 stem_1 A6 2011-06-18
123 stem_2 NA 2011-06-18
321 stem C1 2014-08-05
321 stem_1 C4 2014-08-05
321 stem_2 NA 2014-08-05
677 stem NA NA
677 stem_1 NA NA
677 stem_2 NA NA
谢谢。
解决方法
仅基于 tidyr
的替代解决方案:
df %>% pivot_wider(ID,names_from = Col1,values_from = Value ) %>%
pivot_longer(c("Stem","Stem_1","Stem_2"),names_to = "Col1",values_to = "Value")
,
在数据中创建一个新列,该列的值来自 Value
列,否则为 Col1 = 'Start.Date'
或 NA
。对于每个 ID
,我们可以填充之前日期的 NA
值,并使用 'Start.Date'
删除行。
library(dplyr)
library(tidyr)
df %>%
mutate(Start.Date = as.Date(replace(Value,Col1 != 'Start.Date',NA))) %>%
group_by(ID) %>%
fill(Start.Date) %>%
ungroup() %>%
filter(Col1 != 'Start.Date')
# ID Col1 Value Start.Date
# <int> <chr> <chr> <date>
#1 123 Stem A1 2011-06-18
#2 123 Stem_1 A6 2011-06-18
#3 123 Stem_2 NA 2011-06-18
#4 321 Stem C1 2014-08-05
#5 321 Stem_1 C4 2014-08-05
#6 321 Stem_2 NA 2014-08-05
#7 677 Stem NA NA
#8 677 Stem_1 NA NA
#9 677 Stem_2 NA NA
数据
df <- structure(list(ID = c(123L,123L,321L,677L,677L),Col1 = c("Start.Date","Stem","Stem_2","Start.Date",Value = c("2011-06-18","A1","A6",NA,"2014-08-05","C1","C4",NA)),class = "data.frame",row.names = c(NA,-12L))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。