如何对数据帧进行分组,然后计算R中的不同值

如何对数据帧进行分组,然后计算R中的不同值,r,tidyverse,summarize,R,Tidyverse,Summarize,我在R中有一个数据帧,它有43个变量和80多行。我想根据一个变量(地理区域)对数据进行分组,然后计算一个变量的不同值(0、1、2、3和NAs的数量,等等) 我知道tidyverse中的groupby和summary函数,我知道我可以使用“sum”和“mean”等函数,但我想计数 我试过了 est1% 按地区划分的组别%>% 汇总(计数) 数据如下所示: iso3 Country WHOregion WBIncomeGroup UrbanSanPol UrbanSa

我在R中有一个数据帧,它有43个变量和80多行。我想根据一个变量(地理区域)对数据进行分组,然后计算一个变量的不同值(0、1、2、3和NAs的数量,等等)

我知道
tidyverse
中的
groupby
summary
函数,我知道我可以使用“sum”和“mean”等函数,但我想计数

我试过了
est1%
按地区划分的组别%>%
汇总(计数)

数据如下所示:

    iso3      Country WHOregion       WBIncomeGroup UrbanSanPol UrbanSanWom UrbanSanExt RuralSanPol RuralSanWom
  <chr>        <chr>     <chr>               <chr>       <chr>       <chr>       <chr>       <chr>       <chr>
1   AFG  Afghanistan      EMRO          Low income           0        <NA>        <NA>           1           1
2   ALB      Albania      EURO Upper middle income           1           0           0           1           0
3   ARG    Argentina      PAHO Upper middle income           1           0         0.5           1           0
4   AZE   Azerbaijan      EURO Upper middle income           1           1         0.5           1           1
5   BDI      Burundi      AFRO          Low income           1           1         0.5           1           1
6   BFA Burkina Faso      AFRO          Low income           1           1           1           1           1
在这里输入代码

假设我有三列。第一个是国家名单(法国、德国等)。第二个是区域列表(亚洲、欧洲),第三个是每个国家的离散值(奥运金牌数量)。我想按区域对所有数据进行分组,并计算每个区域出现0、1和2的次数

从你在评论中所说的以及我所理解的:

解释:

df %>% select(continent,countries,medals) %>% group_by(continent,countries) %>% summarize(count =n())
另一种解释是:你想要的是每一个大陆以及它所赢得的不同数量的奖牌

这些数字是该国获得的奥运奖牌

df <- as.data.frame(matrix(c("Asia","Asia","Asia","Asia","Europe","Europe","India","China","Bangladesh","Japan","Spain", "Italy",6,3,4,4,3,3),ncol = 3)) 

df %>% group_by(V1,V3) %>% summarise(count= n()) %>% spread(V3,count)
df%groupby(V1,V3)%%>%summary(count=n())%%>%spread(V3,count)
给我一个输出

# A tibble: 2 x 4
# Groups:   V1 [2]
      V1   `3`   `4`   `6`
* <fctr> <int> <int> <int>
1   Asia     1     2     1
2 Europe     2    NA    NA
#一个tible:2 x 4
#分组:V1[2]
V1`3``4``6`
*    
1亚洲12 1
2欧洲2北美

试试这个;需要dplyr和tidyverse

distinct_cnt <-  input_df  %>%
    gather(variable, value) %>%
    group_by(variable) %>%
    summarise(n_distinct(value))
distinct\u cnt%
聚集(变量,值)%>%
分组依据(变量)%>%
摘要(n_不同(值))

也许可以查看
?表
?此外,如果您发布一些带有感兴趣的变量的样本数据和几行(不是完整的数据集,只是我们需要复制和理解您的问题的数据集),我们可以提供更好的响应。不确定您希望如何进行分组,但可能是这样的:
lappy(split(mtcars,mtcars$cyl),function(x)lappy(x,table))
?用数据框替换
mtcars
,用
$region
替换
$cyl
。要切换嵌套,
lappy(mtcars[-2],函数(x)lappy(split(x,mtcars$cyl,table))
,其中
2
是分组列的列索引。请用df:dput(head(df,10))运行此代码并粘贴输出,以便我们可以对示例代码运行测试。您发布的表没有帮助-没有人希望自己键入。请发布您的数据的dput。金戈的dput(头部(df,10))!你有,第二个选择就是我想要的。非常感谢。我真的很感激。我对R很陌生,我慢慢学会了一些技巧!
distinct_cnt <-  input_df  %>%
    gather(variable, value) %>%
    group_by(variable) %>%
    summarise(n_distinct(value))