计算出现次数和未出现的出现次数

时间:2020-06-29 11:52:53

标签: r counting

我有一个看起来像这样的数据框:

head(df)

id    id_child
1       1
1       2
1       3
2       1
4       1
4       2 

我想创建一个变量,用于计算每个父级的孩子数。所以我想要这样的东西:

head(nb_chilren)

id    id_child      
1       3
2       1
3       0
4       2

如果可能的话,我希望将第3个人表示为有0个孩子,即使她在第一帧中不存在。

注意: ID是连续的,在实际数据中,它们是1到10628。

有什么建议吗?我想我必须使用split()函数,但是我真的不知道如何使用它。

4 个答案:

答案 0 :(得分:5)

id转换为factor,级别从最小id到最大。

df$id <- factor(df$id, levels = min(df$id):max(df$id))

然后可以在基数R中使用table

stack(table(df$id))[2:1]

count中的dplyr

library(dplyr)
df %>% count(id, .drop = FALSE)

#  id n
#1  1 3
#2  2 1
#3  3 0
#4  4 2

答案 1 :(得分:4)

一个<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title></title> </head> <body> <div id="element" onclick="changeColor(this)">hello</div> </body> </html>选项可能是:

dplyr

答案 2 :(得分:3)

这是table

的解决方案
table(factor(df[[1]], levels = Reduce(':', range(df[[1]]))))
#1 2 3 4 
#3 1 0 2

以data.frame格式:

tbl <- table(id = factor(df[[1]], levels = Reduce(':', range(df[[1]]))))
as.data.frame(tbl)
#  id Freq
#1  1    3
#2  2    1
#3  3    0
#4  4    2

答案 3 :(得分:-1)

这是基于r的解决方案:

 id1=c()
 
 for(i in 1:max(df$id)){
 id1[i]=length(df$id[df$id==i])}

 df1=data.frame(id=1:max(df$id),nchild=id1)