我在R中有一个数据框,与以下内容类似。实际上,我的真正'DF'数据框比这个更大,但我真的不想混淆任何人,所以我尽可能地尽量简化。计算data.frame中的数字出现次数。框架
所以这里是数据框架。
id <-c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3)
a <-c(3,1,3,3,1,3,3,3,3,1,3,2,1,2,1,3,3,2,1,1,1,3,1,3,3,3,2,1,1,3)
b <-c(3,2,1,1,1,1,1,1,1,1,1,2,1,3,2,1,1,1,2,1,3,1,2,2,1,3,3,2,3,2)
c <-c(1,3,2,3,2,1,2,3,3,2,2,3,1,2,3,3,3,1,1,2,3,3,1,2,2,3,2,2,3,2)
d <-c(3,3,3,1,3,2,2,1,2,3,2,2,2,1,3,1,2,2,3,2,3,2,3,2,1,1,1,1,1,2)
e <-c(2,3,1,2,1,2,3,3,1,1,2,1,1,3,3,2,1,1,3,3,2,2,3,3,3,2,3,2,1,3)
df <-data.frame(id,a,b,c,d,e)
df
基本上我想要做的就是拿到号码的出现为每列(A,B,C,d,e)和每个ID组(1,2,3)(此后者分组见我的专栏'id')。
所以,对于列“A”和身份证号码“1”(后者见列“ID”)代码将是这样的:
as.numeric(table(df[1:10,2]))
##The results are:
[1] 3 7
只是简单介绍一下我的结果:在'a'列中(并且仅关于在'id'列中具有数字'1'的那些记录),我们可以说数字“1”发生3次并且数字“3”发生7次。
再次,只是为了向您展示另一个例子。对于列“A”和身份证号码“2”(后者分组再次看到列“ID”):
as.numeric(table(df[11:20,2]))
##After running the codes the results are:
[1] 4 3 3
让我再解释一下:在列“A”和关于只有那些观察其在'id'列中具有数字'2'),我们可以说数字'1'发生4次,数字'2'发生3次,数字'3'发生3次。
所以这就是我想要做的。计算每个自定义子集的数字出现次数(然后将这些值收集到数据帧中)。我知道这不是一个困难的任务,但问题是,我将不得不定期更改输入“DF”数据帧,因此行和列的总数可能会随着时间而改变...
什么我已经做了到目前为止,我已经按列分隔“东风”数据帧,这样的:
for (z in (2:ncol(df))) assign(paste("df",z,sep="."),df[,z])
所以df.2将引用的df,一个$,df.3将等于DF $ b,DF。 4将等于DF $ c等,但我现在真的卡住了,我不知道如何前进......
有没有一个适当的,“自动”的方式来解决这个问题?
+1非常干净.. – 2011-03-17 18:31:56