我在 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 等等。但我现在真的卡住了,我不知道如何前进......</ p>
是否有适当的“自动”方法来解决这个问题?