gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 10:10:47 27 4
gpt4 key购买 nike

我在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com