【发布时间】:2014-10-03 18:51:28
【问题描述】:
我正在处理由多个问题(y1、y2、y3、...)的整数值响应和分配给每个受访者的加权计数组成的调查数据,如下所示:
foo <- data.frame(wcount = c(10, 1, 2, 3), # weighted counts
y1 = sample(1:5, 4, replace=T), # numeric responses
y2 = sample(1:5, 4, replace=T), #
y3 = sample(1:5, 4, replace=T)) #
>foo
wcount y1 y2 y3
1 10 5 5 5
2 1 1 4 4
3 2 1 2 5
4 3 2 5 3
我想将其转换为加权表的合并数据框版本,第一列表示响应值,接下来的 3 列表示加权计数。这可以通过列明确地使用:
library(Hmisc)
ty1 <- wtd.table(foo$y1, foo$wcount)
ty2 <- wtd.table(foo$y2, foo$wcount)
ty3 <- wtd.table(foo$y3, foo$wcount)
bar <- merge(ty1, ty2, all=T, by="x")
bar <- merge(bar, ty3, all=T, by="x")
names(bar) <- c("x", "ty1", "ty2", "ty3")
bar[is.na(bar)]<-0
>bar
x ty1 ty2 ty3
1 1 3 0 0
2 2 3 2 0
3 3 0 0 3
4 4 0 1 1
5 5 10 13 12
我怀疑有一种方法可以使用 plyr 和 numcolwise 或 ddply 自动执行此操作。例如,以下内容很接近,但我不确定完成这项工作还需要什么:
library(plyr)
bar2 <- numcolwise(wtd.table)(foo[c("y1","y2","y3")], foo$wcount)
>bar2
y1 y2 y3
1 1, 2, 5 2, 4, 5 3, 4, 5
2 3, 3, 10 2, 1, 13 3, 1, 12
有什么想法吗?
【问题讨论】:
-
您好,您在进行什么调查?这看起来像多重插补,需要
mitools+survey包来获得正确的置信区间。 -
我正在与 EIA 等机构的美国住宅能源消耗调查 (RECS) 合作。很高兴看到几乎所有东西都有一个包,感谢您的参考!
-
这只是一个基于复制的调查。您正在尝试重新发明轮子。如果您使用调查包,replicating their official methods 会更轻松。 :)
-
当一个无知的工程师试图解决他不知道存在的另一个学科中看似基本问题的问题时,就会发生这种情况。谢谢开导!看来我还有很多事情要做。