【发布时间】:2016-08-17 18:52:54
【问题描述】:
我有这个数据集,它的结构是这样的
Neighborhood, var1, var2, COUNTRY, DAY, categ 1, categ 2
1 700 724 AL 0 YES YES
1 500 200 FR 0 YES NO
....
1 701 659 IT 1 NO YES
1 791 669 IT 1 NO YES
....
2 239 222 GE 0 YES NO
等等……
所以层次结构是“邻域 > 日 > 国家”,对于每个邻域、每一天、每个国家,我都有 var1、var2、categ1 和 categ2 的观察结果
目前我对分析国家/地区不感兴趣,所以我想做的是汇总它(通过对国家/地区字段 var1 和 var2 求和,分类变量 categ1 和 categ2 不受country),并有一个数据集,每个 Neighborhood 和每一天都为我提供有关 var1、var2、categ1 和 categ2 的信息
我对 R 编程很陌生,基本上不知道很多包(我会用 C++ 编写程序,但我强迫自己学习 R)... 那么你对如何做到这一点有任何想法吗?
数据
df1 <- structure(list(Neighborhood = c(1L, 1L, 1L, 1L, 2L),
var1 = c(700L, 500L, 701L, 791L, 239L),
var2 = c(724L, 200L, 659L, 669L, 222L),
COUNTRY = c("AL", "FR", "IT", "IT", "GE"),
DAY = c(0L, 0L, 1L, 1L, 0L),
`categ 1` = c("YES", "YES", "NO", "NO", "YES"),
`categ 2` = c("YES", "NO", "YES", "YES", "NO")),
.Names = c("Neighborhood", "var1", "var2", "COUNTRY", "DAY", "categ 1", "categ 2"),
class = "data.frame", row.names = c(NA, -5L))
编辑:@akrun
当我尝试你的命令时,结果是:
聚合(.~Neighborhood+DAY+COUNTRY, data= df1[!grepl("^categ", names(df1))], mean)
Neighborhood, DAY, COUNTRY, var1, var2
1 1 0 AL 700 724
2 1 0 FR 500 200
3 2 0 GE 239 222
4 1 1 IT 746 664
但是(在这个例子中)我想要的是:
Neighborhood, DAY, var1, var2
1 1 0 1200 924 //wher var1=700+500....
2 1 1 1492 1328
3 2 0 239 222
【问题讨论】:
-
你要
aggregate(.~Neighbourhood+DAY+COUNTRY, data= df1[!grepl("^categ, names(df1))], mean) -
不,我对分类列感兴趣,我对国家列不感兴趣......所以按照你的例子我应该这样做:聚合(.~Neighbourhood+DAY,data=df1[ !grepl("^COUNTRY, names(df1))], sum) 对吗?
-
不,这行不通。如果您对分类列感兴趣,这些列是否包含在分组列中?
-
分类变量只是对日期和街区进行分组,所以在聚合之前删除它们并稍后添加它们应该没问题?
-
请检查解决方案。它做到了。
标签: r dataset aggregation categorical-data