我有一个如下的数据集(简化):
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 Server集成工具来完成此操作,但无济于事。有没有我应该使用的工具,还是Excel中有可以帮助我的工具?数据集很大,无法蛮力
最佳
答案 0 :(得分: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
答案 1 :(得分:2)
您可以使用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 :(得分:1)
一种选择是使用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