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

r 数据转换单独的列

如何解决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 举报,一经查实,本站将立刻删除。