У меня есть набор данных, который выглядит следующим образом (упрощенно):

Fund    Field1-2012    Field1-2013    Field2-2012   Field2-2013
 FD1       x               x               x            x
 FD2       x               x               x            x

Как вы можете видеть, даты существуют с полями, что делает это очень недружественным для большинства анализа. Что хотите, это следующее

Fund   Year   Field1   Field2
 FD1    2012   x          x
 FD1    2013   x          x
 FD2    2012   x          x
 FD2    2013   x          x

Я использовал инструменты интеграции с SQL-сервером, но безрезультатно. Есть ли инструмент, который я должен использовать, или в Excel есть что-то, что может мне помочь? Невозможно перебрать силу, так как набор данных довольно большой

Лучший

1
Wadstk 21 Авг 2018 в 20:33

3 ответа

Лучший ответ

У вас есть тег R, поэтому вот решение R:

df = read.table(text = "
Fund    Field1-2012    Field1-2013    Field2-2012   Field2-2013
FD1       5               7               9            10
FD2       6               8               9            10
", header=T)

library(tidyverse)

df %>%
  gather(key, value, -Fund) %>%
  separate(key, c("type","year"), convert = T) %>%
  spread(type, value)

#   Fund year Field1 Field2
# 1  FD1 2012      5      9
# 2  FD1 2013      7     10
# 3  FD2 2012      6      9
# 4  FD2 2013      8     10
3
AntoniosK 21 Авг 2018 в 17:39

Вы можете использовать apply, чтобы развернуть данные:

select t.Fund, tt.year, tt.Field1, tt.Field2
from table t cross apply
     ( values (2012, [Field1-2012], [Field2-2012]), 
              (2013, [Field1-2013], [Field2-2013]) 
     ) tt (year, Field1, Field2);
2
Yogesh Sharma 21 Авг 2018 в 17:42

Один из вариантов - использовать union all:

select fund, 2012 as year, Field1-2012 as field1, Field2-2012 as field2
from yourtable
union all
select fund, 2013 as year, Field1-2013 as field1, Field2-2013 as field2
from yourtable
1
sgeddes 21 Авг 2018 в 17:38
51953945