首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据R中2个变量的条件按组计算观测值

根据R中2个变量的条件按组计算观测值
EN

Stack Overflow用户
提问于 2019-04-26 02:45:09
回答 1查看 443关注 0票数 0

这是shor示例数据。原始数据有许多列和行。

头(df,15)

代码语言:javascript
复制
    ID   col1   col2
1   1  green yellow
2   1  green   blue
3   1  green  green
4   2 yellow   blue
5   2 yellow yellow
6   2 yellow   blue
7   3 yellow yellow
8   3 yellow yellow
9   3 yellow   blue
10  4   blue yellow
11  4   blue yellow
12  4   blue yellow
13  5 yellow yellow
14  5 yellow   blue
15  5 yellow yellow

我想计算包括col1的颜色在内的col2中有多少种不同的颜色。例如:对于ID=4,在col2中只有一种颜色。如果我们包括col1,有两种不同的颜色。所以输出应该是2,依此类推。

我尝试过这种方式,但没有得到我想要的输出: ID =4变成了0,这不是我想要的。那么,我该如何告诉R在col1中计算颜色呢?

代码语言:javascript
复制
out <- df %>%
  group_by(ID) %>%
  mutate(N = ifelse(col1 != col2, 1, 0))

我想要的输出是这样的:

代码语言:javascript
复制
ID  col1    count
1   green   3
2   yellow  2
3   yellow  2
4   blue    2
5   yellow  2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-26 02:50:04

您可以执行以下操作:

代码语言:javascript
复制
df %>%
 group_by(ID, col1) %>%
 summarise(count = n_distinct(col2))

     ID col1   count
  <int> <chr>  <int>
1     1 green      3
2     2 yellow     2
3     3 yellow     2
4     4 blue       1
5     5 yellow     2

或者甚至是:

代码语言:javascript
复制
df %>%
 group_by(ID, col1) %>%
 summarise_all(n_distinct)

     ID col1    col2
  <int> <chr>  <int>
1     1 green      3
2     2 yellow     2
3     3 yellow     2
4     4 blue       1
5     5 yellow     2

按每三行分组:

代码语言:javascript
复制
df %>%
 group_by(group = gl(n()/3, 3), col1) %>%
 summarise(count = n_distinct(col2))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55855797

复制
相关文章

相似问题

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