У меня есть набор данных, который выглядит следующим образом (упрощенно):
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 есть что-то, что может мне помочь? Невозможно перебрать силу, так как набор данных довольно большой
Лучший
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
Вы можете использовать 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);
Один из вариантов - использовать 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
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.