【发布时间】:2011-07-17 06:12:54
【问题描述】:
我在 R 中有一个类似于以下的数据框。实际上,我真正的 'df' 数据框比这里的要大得多,但我真的不想让任何人感到困惑,所以这就是我尝试尽可能简化事情的原因。
这是数据框。
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”列和 id 编号“1”(对于后者,请参见“id”列),代码将是这样的:
as.numeric(table(df[1:10,2]))
##The results are:
[1] 3 7
只是简单解释一下我的结果:在“a”列(并且仅关于那些在“id”列中具有数字“1”的记录)我们可以说数字“1”出现了 3 次,而数字“3”出现了7 次。
再次,只是为您展示另一个示例。对于“a”列和 id 编号“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”数据框,因此总行数和列数都可能随着时间而变化……
到目前为止,我所做的是按列分隔“df”数据框,如下所示:
for (z in (2:ncol(df))) assign(paste("df",z,sep="."),df[,z])
所以 df.2 将引用 df$a,df.3 将等于 df$b,df.4 将等于 df$c 等等。但是我现在真的被卡住了,我不知道如何前进…
是否有适当的“自动”方法来解决这个问题?
【问题讨论】: