2009-09-11 74 views
0

我们正在开展一项社会资本项目,因此我们的数据集中有一份个人组织成员资格清单。因此,每个人都得到一个数字ID,然后得到他们所在的每个小组的一个子ID。因此,分析单位就是他们所在的小组。我们的一个变量是它的组类型的三点量表。听起来很简单吗?分析转换单位

我们希望把分析的单位个体水平和冷凝组的类型是到一个变量标志着他们是在多少不同类型的组。

例如,人一个是八组。在这些组中,三个是(1s),三个是(2s),两个是(3s)。理想情况下,个人水平变量的样子是3,因为她有三种类型的组。

这至少可能吗?

+0

添加实际样本数据将为您提供更好的答案。我可以想到3种看起来很明显的方法,但答案取决于数据是如何形成的。你的每一行数据都是一个人吗?如果是这样,是否有一堆如果字段为子ID?或者每行都是person + subid的组合。 – 2009-09-11 19:02:44

+1

JD说什么。但请参阅我的答案,了解如何生成虚假数据,并可能对其进行更改以符合您的数据。 – 2009-09-11 19:11:52

+0

你是这么好的堆栈溢出公民,爱德华多。 – 2009-09-11 21:15:52

回答

3
##simulate data 
##individuals 
n <- 10 
## groups 
g <- 5 
## group types 
gt <- 3 
## individuals*group membership 
N <- 20 
## inidividuals data frame 
di <- data.frame(individual=sample(1:n,N,replace=TRUE), 
       group=sample(1:g,N, replace=TRUE)) 
## groups data frame 
dg <- data.frame(group=1:g, type=sample(1:gt,g,replace=TRUE)) 
## merge 
dm <- merge(di,dg) 
## order - not necessary, but nice 
dm <- dm[order(dm$individual),] 
## group type per individual 
library(plyr) 
dr <- ddply(dm, "individual", function(x) length(unique(x$type))) 

> head(dm) 
    group individual type 
2  2   1 2 
8  2   1 2 
20  5   1 1 
9  3   3 2 
12  3   3 2 
17  4   3 2 

> head(dr) 
    individual V1 
1   1 2 
2   3 1 
3   4 2 
4   5 1 
5   6 1 
6   7 1 
1

我想你在问什么是否有可能计算个人所属的独特类型组的数量。

如果是这样,那肯定是可行的。

我不能告诉你如何在R中做到这一点,因为我不知道很多R,而且我不知道你的数据是什么样的。但没有理由不可能。

此数据来自数据库吗?如果是这样,那么编写SQL查询来计算所需的值可能会更容易,而不是在R中执行。如果描述模式,应该有很多人可以为您提供所需的查询。