r - 计算数据帧子集中数字的出现

标签 r subset

我在 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 等。但我现在真的卡住了,我不知道如何前进……

是否有适当的“自动”方法来解决这个问题?

最佳答案

怎么样-

> library(reshape)

> dftab <- table(melt(df,'id'))
> dftab
, , value = 1

   variable
id  a b c d e
  1 3 8 2 2 4
  2 4 6 3 2 4
  3 4 2 1 5 1

, , value = 2

   variable
id  a b c d e
  1 0 1 4 3 3
  2 3 3 3 6 2
  3 1 4 5 3 4

, , value = 3

   variable
id  a b c d e
  1 7 1 4 5 3
  2 3 1 4 2 4
  3 5 4 4 2 5

因此,要获得“a”列和“1”组中“3”的数量 你可以这样做

> dftab[3,'a',1]
[1] 4

关于r - 计算数据帧子集中数字的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5337013/

相关文章:

r - 根据另一个 sf 特征绘制 sf 对象的子集(对于某些状态)

r - r data.frame RMarkdown 中的粗体条目

r - 消除字符向量中非唯一元素的歧义

R - 随机森林未正确加载

r - 在 r 中的数据框中搜索字符串的快速方法

r - 将数据帧的各个子集乘以不同的向量

r - 创建新列以显示 dplyr 中字符串的部分匹配

r - 如何将另一个图层/新系列添加到ggplot中?

math - 在Erlang中查找子集,请帮我优化解决方案

java - 查找一组数字的特定大小的所有可能组合