我有一个类似面板的数据集,随着时间的推移,它有多个相同观察结果的实例。我有一个变量来计算特定公司每年的外观(例如,公司 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()
等命令,但只遇到了错误,因为名称是字符,或者没有适用的摘要方法等。任何帮助将不胜感激。
对软件包没有偏好 -dplyr
、base 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))