我使用R来生成过去6个月的统计报告。我得到了如下所述的要求:
输入数据框:
FY_Qtr region Lic_type revenue
2009 Q1 AP NCV 126.67
2010 Q1 NA NCV 395.80
2011 Q1 LA NCV 469.10
2012 Q1 EMEA MR 173.85
2013 Q1 JAPAN MR 140.24
预期数据:
FY_Qtr AP.NCV NA.NCV LA.NCV EMEA.MR JAPAN.MR
2009 Q1 126.67 - - - -
2010 Q1 - 395.80 - - -
2011 Q1 - - 469.10 - -
2012 Q1 - - - 173.85 -
2013 Q1 - - - - 140.24
任何人都可以帮助我获得预期数据吗?
答案 0 :(得分:6)
这正是为'reshape2'包构建的任务类型。
设置:让我们加载示例数据。
data <- read.table(text="
FY_Qtr region Lic_type revenue
'2009 Q1' 'AP' NCV 126.67
'2010 Q1' 'NA' NCV 395.80
'2011 Q1' 'LA' NCV 469.10
'2012 Q1' 'EMEA' MR 173.85
'2013 Q1' 'JAPAN' MR 140.24
", header=TRUE)
投放数据:基本上您现在拥有的内容被视为“融化”数据。对于每组变量组合和指定的值,您都有ID列,其中包含单独的行。这意味着您可以跳过通常的'reshape2'步骤,首先融化数据并直接跳转到铸造,如下所示:
library(reshape2)
dcast(data, FY_Qtr ~ region + Lic_type, value.var='revenue')
# FY_Qtr AP_NCV EMEA_MR JAPAN_MR LA_NCV NA_NCV
# 1 2009 Q1 126.67 NA NA NA NA
# 2 2010 Q1 NA NA NA NA 395.8
# 3 2011 Q1 NA NA NA 469.1 NA
# 4 2012 Q1 NA 173.85 NA NA NA
# 5 2013 Q1 NA NA 140.24 NA NA
我们正在使用'dcast'功能,因为我们想要输出数据帧。然后,我们将您的融化数据指定为输入。下一部分解释了如何关联数据,指定ID(FY_Qtr)的'〜'等式的左侧和指定要使用的列变量组合的'〜'的右侧。然后'value.var'参数指定(作为字符串)要用作值的变量。
答案 1 :(得分:2)
+1到@Dinre;这是一个很好的解决方案,值得学习reshape2。如果你想看看如何在基数R中做到这一点,那就不难了:
data <- read.table(text="FY_Qtr region Lic_type revenue
'2009 Q1' 'AP' NCV 126.67
'2010 Q1' 'NA' NCV 395.80
'2011 Q1' 'LA' NCV 469.10
'2012 Q1' 'EMEA' MR 173.85
'2013 Q1' 'JAPAN' MR 140.24",
header=TRUE)
expected_data <- matrix(NA, nrow=5, ncol=5)
rownames(expected_data) <- data$FY_Qtr
colnames(expected_data) <- with(data, paste(region, Lic_type, sep="."))
diag(expected_data) <- data$revenue
expected_data
AP.NCV NA.NCV LA.NCV EMEA.MR JAPAN.MR
2009 Q1 126.67 NA NA NA NA
2010 Q1 NA 395.8 NA NA NA
2011 Q1 NA NA 469.1 NA NA
2012 Q1 NA NA NA 173.85 NA
2013 Q1 NA NA NA NA 140.24