在R中取消堆叠或加宽列向量

时间:2018-04-17 16:24:12

标签: r reshape reshape2

我正在使用来自日志的数据,其中数据采用以下格式:

    V1
1 TASK [include_vars]
2 Thursday 05 April 2018 20:21:52 -0500 (0:00:00.429) 0:00:00.429
3 TASK [include_vars]
4 Thursday 05 April 2018 20:21:53 -0500 (0:00:00.289) 0:00:00.718
5 TASK [include_vars]
6 Thursday 05 April 2018 20:21:53 -0500 (0:00:00.270) 0:00:00.988

每个时间戳对应于其上方的任务。我需要的是将每个时间戳移动到一个新列和一行(以便它与它对应的任务一致)。我已经厌倦了使用dcast,unstack,spread等等,但由于这是一个单向矢量,我不知道如何使这个工作。

谢谢!

P.S。这些数据已经在某种程度上被格式化/过滤了,所以我不认为我如何导入它有不同的方法 - 但我愿意接受建议。

2 个答案:

答案 0 :(得分:2)

您可以将列的备用元素绑定在一起作为单独的列...

return

答案 1 :(得分:0)

在回答你关闭的第二个问题时,我不能在那里发帖......

如果x是您的日志数据向量,那么......

library(tidyverse)
df <- tibble(x=x) #convert to tibble
df <- df %>% mutate(Type=ifelse(str_detect(x,"PLAY"),     "PLAY",
                         ifelse(str_detect(x,"TASK"),     "TASK",
                         ifelse(str_detect(x,"\\d\\:\\d"),"TimeStamp",
                                                          "Other"))),
                    TaskNo=cumsum(Type=="TASK"|Type=="PLAY")) %>% 
             group_by(TaskNo) %>% 
             summarise(Play=first(x[Type=="PLAY"]),
                       Task=first(x[Type=="TASK"]),
                       TimeStamp=first(x[Type=="TimeStamp"]),
                       Other=paste(x[Type=="Other"],collapse=","))

df
# A tibble: 9 x 5
  TaskNo Play               Task                 TimeStamp          Other                                         
   <int> <chr>              <chr>                <chr>              <chr>                                         
1      1 PLAY [all]         NA                   NA                 ""                                            
2      2 NA                 TASK [validate_fact~ Thursday 05 April~ ok: [NodeA],ok: [NodeB],ok: [NodeC]           
3      3 NA                 TASK [validate_fact~ Thursday 05 April~ ""                                            
4      4 NA                 TASK [validate_fact~ Thursday 05 April~ ""                                            
5      5 NA                 TASK [validate_os_f~ Thursday 05 April~ ok: [NodeA],ok: [NodeB],ok: [NodeC]           
6      6 NA                 TASK [validate_os_f~ Thursday 05 April~ ""                                            
7      7 PLAY [k8s-cluster] NA                   NA                 ""                                            
8      8 NA                 TASK [idns/idns-set~ Thursday 05 April~ ok: [NodeA -> NodeA] => (item=idns_user) => {~
9      9 NA                 TASK [idns/idns-set~ Thursday 05 April~ ok: [NodeA],ok: [NodeB],ok: [NodeC]