如何重新组织R中的单元格
我有这个df:如何重新组织R中的单元格,r,R,我有这个df: structure(list(YEAR = c("2007", "2007", "2007", "2008", "2008", "2008", "2008", "2008", "2008", "2008"), MONTH = c("12", "10", "11", "01", "03", "05", "06", "08", "09", "10"), TOTAL = c(85055988L, 21567576L, 82763640L, 91007916L, 93936288L
structure(list(YEAR = c("2007", "2007", "2007", "2008", "2008",
"2008", "2008", "2008", "2008", "2008"), MONTH = c("12", "10",
"11", "01", "03", "05", "06", "08", "09", "10"), TOTAL = c(85055988L,
21567576L, 82763640L, 91007916L, 93936288L, 99646750L, 90091044L,
98811936L, 96888876L, 100909236L)), .Names = c("YEAR", "MONTH",
"TOTAL"), row.names = c("24801", "33863", "34055", "24973", "25046",
"25295", "25384", "25541", "25861", "27319"), class = "data.frame")
我想将此数据框组织如下:
YEAR JAN FEB MARCH .... DEC
2009 TOTAL VALUE FOR EACH month goes to each corresponding cells.
我可以在R中轻松实现这一点吗?
dcast
和xtabs
是需要考虑的选项之一:
xtabs(TOTAL ~ YEAR + MONTH, df)
# MONTH
# YEAR 01 03 05 06 08 09 10 11 12
# 2007 0 0 0 0 0 0 21567576 82763640 85055988
# 2008 91007916 93936288 99646750 90091044 98811936 96888876 100909236 0 0
library(reshape2)
dcast(df, YEAR ~ MONTH, value.var="TOTAL", fun.aggregate=sum)
# YEAR 01 03 05 06 08 09 10 11 12
# 1 2007 0 0 0 0 0 0 21567576 82763640 85055988
# 2 2008 91007916 93936288 99646750 90091044 98811936 96888876 100909236 0 0
请看包裹,谢谢。如果我想了解不同年份同一月份之间的差异,是否有一个函数可以使用?例如,我希望看到2010年和2011年6月的差异?@user1471980,为什么不使用普通子集呢?假设
dcast
步骤的输出是一个名为“df.wide”的data.frame
,您可以使用(df.wide,df.wide[YEAR==“2011”,“06”]-df.wide[YEAR==“2010”,“06”])尝试类似的方法。当然,如果你真的想简化你的生活,我还建议你使用实时序列数据结构!如果您的数据由10年组成,并且您需要跟踪每年相同月份之间的差异,您将如何做到这一点?@user1471980,正如我在之前的评论中所指出的,我将使用“zoo”或“xts”等软件包中的实际时间序列对象或函数,以便您更方便地处理时间序列数据。