簡體   English   中英

拆開或加寬R中的列向量

[英]Unstack, or widen a column vector in R

我正在處理來自日志的數據,其中數據的格式如下:

    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等方式,但是由於這是一個單一的向量,所以我不確定如何進行這項工作。

謝謝!

ps這些數據已經過某種格式/過濾,因此我認為導入方式沒有其他方法-但我願意接受建議。

您可以將列的替代元素綁定為單獨的列...

df2 <- cbind(V1=df$V1[seq(1, nrow(df), 2)],
             V2=df$V1[seq(2, nrow(df), 2)])

為了回答您的第二個問題,該問題已經結束,因此我不能在此處發布...

如果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]  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM