首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中按组和ID计数观察值

在R中按组和ID计数观察值
EN

Stack Overflow用户
提问于 2019-07-25 22:43:57
回答 3查看 136关注 0票数 0

我正在试着写一个基于条件计算观察值的代码。我不知道这是否可能。我想要实现的是在组中只计算一个观察值,而不是将它们加在一起。

这是数据帧:

代码语言:javascript
复制
df <- structure(list(ID = c("P40", "P40", "P40", "P40", "P42", "P42",
                     "P43", "P43", "P43"), Year = c("2013", "2013", "2014", "2015", "2013", "2014", "2014", "2014", "2014"),
              Meeting = c("Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes")),
         class = "data.frame", row.names = c(NA, -9L))



ID  Year Meeting
P40 2013     Yes
P40 2013     Yes
P40 2014     Yes
P40 2015     Yes
P42 2013     Yes
P42 2014     Yes
P43 2014     Yes
P43 2014     Yes
P43 2014     Yes

我想要实现的结果是:

代码语言:javascript
复制
ID Year      Count
P40 2013     1
P40 2014     1
P40 2015     1
P42 2013     1
P42 2014     1
P43 2014     1

这就是我到目前为止的代码,它只计算所有的观察值。

代码语言:javascript
复制
df %>% group_by(ID, Year) %>% summarise(Count = n())
EN

回答 3

Stack Overflow用户

发布于 2019-07-25 22:45:29

你想要的是:

代码语言:javascript
复制
count(df %>% distinct(ID, Year), ID, Year, name = 'Count')

输出:

代码语言:javascript
复制
# A tibble: 6 x 3
  ID    Year  Count
  <chr> <chr> <int>
1 P40   2013      1
2 P40   2014      1
3 P40   2015      1
4 P42   2013      1
5 P42   2014      1
6 P43   2014      1
票数 4
EN

Stack Overflow用户

发布于 2019-07-25 22:46:04

我们可以在数据集上执行distinct,然后使用count

代码语言:javascript
复制
library(dplyr)
df %>% 
   distinct %>% 
   count(ID, Year)
# A tibble: 6 x 3
#  ID    Year      n
#  <chr> <chr> <int>
#1 P40   2013      1
#2 P40   2014      1
#3 P40   2015      1
#4 P42   2013      1
#5 P42   2014      1
#6 P43   2014      1

或者使用data.table

代码语言:javascript
复制
library(data.table)
unique(setDT(df[1:2]))[, .N, .(ID, Year)]

或者使用base R

代码语言:javascript
复制
subset(as.data.frame(table(unique(df[1:2]))), Freq != 0)

cbind的一个选项

代码语言:javascript
复制
cbind(unique(df[1:2]), n = 1)
票数 3
EN

Stack Overflow用户

发布于 2019-07-25 23:05:23

既然你只想在每组中有一个观察结果,这不是

代码语言:javascript
复制
transform(unique(df), count = 1)

#   ID Year Meeting count
#1 P40 2013     Yes     1
#3 P40 2014     Yes     1
#4 P40 2015     Yes     1
#5 P42 2013     Yes     1
#6 P42 2014     Yes     1
#7 P43 2014     Yes     1

或者,如果只想对选定的列进行检查

代码语言:javascript
复制
transform(unique(df[1:2]), count = 1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57204691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档