R/dplyr:如何在不重复计算的情况下计算一段时间内观测值的唯一出现次数?



我有一个类似面板的数据集,随着时间的推移,它有多个相同观察结果的实例。我有一个变量来计算特定公司每年的外观(例如,公司 A 在 XXXX 年有 10 台活跃机器(,我还想创建一个变量来计算特定用户曾经拥有的机器数量(即历史计数(。

下面是我为此编写的一行代码的示例:

### Creates a column that counts the number of unique machines by company name all time
df_panel <- df_panel %>% group_by(Company_name, Machine_name) %>% summarise(Machine_count_alltime = n())

我遇到的问题是它返回一个这样的输出表:

Company Name      Machine Name      n     
Company A         Machine Y         1
Company B         Machine X1        1
Company B         Machine X2        1
Company B         Machine Z         2
Company C         Machine K         5
Company C         Machine U         2

在上表中,n 是特定Machine Name在整个数据年中出现的次数(例如,机器 K 出现在其中的 5 年中(。我想要一个计数每个Company Name多年来拥有的唯一机器的数量作为附加列,而不是上表中每个Machine Name的实例。它应该看起来像这样:

Company Name      Machine Name           
Company A         Machine Y         1
Company B         Machine X1        3
Company B         Machine X2        3
Company B         Machine Z         3
Company C         Machine K         2
Company C         Machine U         2

我只在group_by中包含Machine Name列,因为我想确保特定机器不会在总时间计数变量中重复计算。我也尝试在pipe operators中使用tally()sum()等命令,但只遇到了错误,因为名称是字符,或者没有适用的摘要方法等。任何帮助将不胜感激。

对软件包没有偏好 -dplyrbase R等对我来说很好。

第三个选项,因为我不确定正确的输出应该是什么样子:

library(tidyverse)
df %>%
group_by(`Company Name`) %>%
distinct(`Machine Name`) %>%
mutate(count=n())

这会完成这项工作吗(使用 dplyr::count(( (?

library(tidyverse)
data <- tribble(~"Company Name", ~"Machine Name",
"Company A", "Machine Y",
"Company B", "Machine X1",
"Company B", "Machine X1",
"Company B", "Machine X1",
"Company B", "Machine X2",
"Company B", "Machine X2",
"Company B", "Machine X2",
"Company C", "Machine K",
"Company C", "Machine K",
"Company C", "Machine U",
"Company C", "Machine U")
data %>% 
count(`Company Name`, `Machine Name`)
#> # A tibble: 5 x 3
#>   `Company Name` `Machine Name`     n
#>   <chr>          <chr>          <int>
#> 1 Company A      Machine Y          1
#> 2 Company B      Machine X1         3
#> 3 Company B      Machine X2         3
#> 4 Company C      Machine K          2
#> 5 Company C      Machine U          2

创建于 2020-06-11 由 reprex 软件包 (v0.3.0(

如果我理解正确,这应该可以工作:

library(tidyverse)  
df_panel %>% group_by(Company_name, Machine_name) %>% 
summarise(n = length(Machine_name))

最新更新