首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何自动计数()每个变量

如何自动计数()每个变量
EN

Stack Overflow用户
提问于 2020-09-11 14:16:41
回答 3查看 104关注 0票数 3

我正在清理一些数据,并希望使用dplyr中的count()函数来查看每个变量的唯一值。

有办法自动做到这一点吗?现在我正在使用这个方法:

代码语言:javascript
复制
df %>% count(variable1)
df %>% count(variable2)
df %>% count(variable3)
...

我希望返回所有这些变量,而不必重复代码行并键入每个变量。我想让R识别所有的列名,并自动填写它们,但我不知道从哪里开始。如果我只是把变量加在一起,比如说

df %>% count(variable1, variable2)

当我想要每个变量的表时,就会得到这两个变量的计数。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-11 14:54:27

假设您希望从amgearcarb中计数mtcars。您可以通过table()对每个变量应用函数map(),后者返回list对象。

代码语言:javascript
复制
library(dplyr)
library(purrr)

mtcars %>%
  select(am, gear, carb) %>%
  map(table)

# $am
#  0  1 
# 19 13 
# 
# $gear
#  3  4  5 
# 15 12  5 
# 
# $carb
#  1  2  3  4  6  8 
#  7 10  3 10  1  1

base 版本:

代码语言:javascript
复制
lapply(mtcars[c("am", "gear", "carb")], table)

此外,您还可以使用summary()来计算因子变量。

代码语言:javascript
复制
mtcars %>%
  select(am, gear, carb) %>%
  mutate(across(.fn = as.factor)) %>%
  summary

#  am     gear   carb  
#  0:19   3:15   1: 7  
#  1:13   4:12   2:10  
#         5: 5   3: 3  
#                4:10  
#                6: 1  
#                8: 1
票数 2
EN

Stack Overflow用户

发布于 2020-09-11 14:30:22

看起来,您可以使用tidyverse方法来解决问题。您希望获取数据集中每个变量的计数(请下次添加df示例)。您可以使用长格式的数据获取与您想要的接近的东西。我将向您展示一个mtcars数据的示例。我将选择一些显示类的变量,以便用计数对它们进行汇总。在这里,代码:

代码语言:javascript
复制
library(tidyverse)
#Data
data("mtcars")

我将选择一些分类变量与下一段代码,然后我将重塑为长。最后,我将使用summarise()n() (用于计数)和group_by()来确定计数:

代码语言:javascript
复制
#Code
mtcars %>% select(cyl,vs,am,gear,carb) %>%
  #Format to long
  pivot_longer(cols = everything()) %>%
  #Group and summarise
  group_by(name,value) %>%
  summarise(N=n())

输出:

代码语言:javascript
复制
# A tibble: 16 x 3
# Groups:   name [5]
   name  value     N
   <chr> <dbl> <int>
 1 am        0    19
 2 am        1    13
 3 carb      1     7
 4 carb      2    10
 5 carb      3     3
 6 carb      4    10
 7 carb      6     1
 8 carb      8     1
 9 cyl       4    11
10 cyl       6     7
11 cyl       8    14
12 gear      3    15
13 gear      4    12
14 gear      5     5
15 vs        0    18
16 vs        1    14

如您所见,所有变量都显示了它们各自的组和计数。

票数 2
EN

Stack Overflow用户

发布于 2020-09-11 15:05:16

一个简单的解决方案是将sapplylapplytable结合使用。

代码语言:javascript
复制
sapply(df,table)

这将为dt的每个列返回一个计数表的列表,您可以始终传入一个子设置的数据,以获得您感兴趣的变量的计数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63848845

复制
相关文章

相似问题

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