使用变量名中的值重塑数据

时间:2018-12-07 18:35:12

标签: r reshape tidyr

我有一个非常宽的数据集(2000多个变量),我试图使其整洁,但是却试图从变量名中提取一个值而陷入困境。如果我有一个变量KeyWait,我想将其重塑为三个变量:"E1Time1_Date"E=1Time=1 =原始日期值。

这甚至可能吗?我尝试使用Date,但我想我首先需要做的一个步骤是我丢失了。谢谢您的帮助!

enter image description here

这是示例数据集,如果有人想使魔术发生:

gather()

1 个答案:

答案 0 :(得分:1)

看起来您混合使用了数字和日期值,这会使收集起来有些棘手。一种方法是暂时将日期转换为数字,然后在使用最终格式后可以将其更改回。这应该可以帮助您入门。

library(tidyverse)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -2L))
data %>%  
  #convert dates to numeric so we can gather them in the same column
  mutate_if(is.POSIXct, as.integer) %>%
  gather(-ID, -contains("Unrelated"), key = variable, value = value) %>% 

  #add an underscore between E and T to make separating them easier
  mutate(loc = gregexpr("T", variable)[[1]],
         variable = paste0(substr(variable, 1, loc - 1), "_",
                           substr(variable, loc, nchar(variable)))) %>% 
  select(-loc) %>% 

  #separate into three distinct columns
  separate(variable, into = c("E", "T", "vDate"), sep = "_")

# A tibble: 40 x 7
ID      UnrelatedV1 UnrelatedV2     E     T vDate      value
<dbl>       <chr>       <chr>   <chr> <chr> <chr>      <dbl>
1   123  Unrelated1  Unrelated2    E1    T1  Date 1506816000
2   225  Unrelated1  Unrelated2    E1    T1  Date 1513296000
3   123  Unrelated1  Unrelated2    E1    T1    v1         10
4   225  Unrelated1  Unrelated2    E1    T1    v1         20
5   123  Unrelated1  Unrelated2    E1    T1    v2         20
6   225  Unrelated1  Unrelated2    E1    T1    v2         20
7   123  Unrelated1  Unrelated2    E1    T1    v3         30
8   225  Unrelated1  Unrelated2    E1    T1    v3         20
9   123  Unrelated1  Unrelated2    E1    T1    v4         40
10   225  Unrelated1  Unrelated2    E1    T1    v4         20