【问题标题】:Finding occurrences of a repeat value in a row, R dataframe or Excel?在行、R 数据框或 Excel 中查找重复值的出现?
【发布时间】:2018-05-24 14:15:54
【问题描述】:

目前需要以下数据框的帮助(这也是 Excel 中相同的格式,因此可以在 Excel 或 R 中完成)

数据框:

Company_id    Year    Month    Employee_Range   Employees Cheese Chips Eggs
1             2014    NA       NA               NA         1       0    0   
1             2014    NA       NA               NA         1       0    0  
1             2014    NA       NA               NA         1       0    0 
2             2014    NA       NA               NA         0       1    0
3             2014    NA       NA               NA         0       0    1 
3             2014    NA       NA               NA         0       0    1

数据框持续大约 630,000 行,这里有一些进一步的信息

1) 对于 company_id 列,每个公司都有编号,因此 1 = 公司 1,2 = 公司 2,依此类推。每家公司根据他们是否多次收到薯条、鸡蛋或奶酪而重复,这就是为什么公司 2 只有一排。

2) 列下的数字、奶酪、薯条和鸡蛋仅表示 1 =“是的,他们订购了”和 0 =“不,他们没有订购”,所以它的工作原理就像一个理货表,但每个公司都是行

3) 其余信息不适用,因为不需要

4) 如果一家公司选择了鸡蛋、奶酪或薯条中的一种,那么它只是该列!没有公司选择多个项目的情况或发生,因此所有数字都包含在该公司的单个列中。

我想要一种方法来查找给定公司行的计数总和,所以我想生成一个数据框或 Excel 表,例如:

   Company_id    Year    Month    Employee_Range   Employees Cheese Chips Eggs
        1          2014    NA       NA               NA         3       0    0
        2          2014    NA       NA               NA         0       1    0
        3          2014    NA       NA               NA         0       0   2

任何想法都有帮助,

谢谢你,

【问题讨论】:

标签: r excel dataframe pivot-table vlookup


【解决方案1】:

使用dplyr 的解决方案。 dat2 是最终输出。

library(dplyr)

dat2 <- dat %>%
  group_by(Company_id, Year, Month, Employee_Range, Employees) %>%
  summarise_at(vars(Cheese, Chips, Eggs), funs(sum(.))) %>%
  ungroup()
dat2
# # A tibble: 3 x 8
#   Company_id  Year Month Employee_Range Employees Cheese Chips  Eggs
#        <int> <int> <lgl> <lgl>          <lgl>      <int> <int> <int>
# 1          1  2014 NA    NA             NA             3     0     0
# 2          2  2014 NA    NA             NA             0     1     0
# 3          3  2014 NA    NA             NA             0     0     2

数据

dat <- read.table(text = "Company_id    Year    Month    Employee_Range   Employees Cheese Chips Eggs
1             2014    NA       NA               NA         1       0    0   
1             2014    NA       NA               NA         1       0    0  
1             2014    NA       NA               NA         1       0    0 
2             2014    NA       NA               NA         0       1    0
3             2014    NA       NA               NA         0       0    1 
3             2014    NA       NA               NA         0       0    1",
                  header = TRUE)

【讨论】:

    【解决方案2】:

    试试这个:

    library(dplyr)
    
    df %>% 
      group_by(Company_id, Year, Month, Employee_Range) %>% 
      summarize(Cheese = sum(Cheese), 
                Chips = sum(Chips),
                Eggs = sum(Eggs)) %>%
    as.data.frame()
    

    如你所愿:

      Company_id Year Month Employee_Range Cheese Chips Eggs
    1          1 2014    NA             NA      3     0    0
    2          2 2014    NA             NA      0     1    0
    3          3 2014    NA             NA      0     0    2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 2016-11-03
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多