我有一个非常宽的数据集(2000多个变量),我试图使其整洁,但是却试图从变量名中提取一个值而陷入困境。如果我有一个变量KeyWait
,我想将其重塑为三个变量:"E1Time1_Date"
,E=1
和Time=1
=原始日期值。
这甚至可能吗?我尝试使用Date
,但我想我首先需要做的一个步骤是我丢失了。谢谢您的帮助!
这是示例数据集,如果有人想使魔术发生:
gather()
答案 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