R 中的 CountIF 函数?

CountIF function in R?

我在excel中有以下公式,但是计算需要永远,所以我想找到一种方法来计算excel中的这些公式。

我正在使用以下公式计算项目在某个位置(位置 1、位置 2 和外部)出现的次数:

=SUMPRODUCT(($N:$N=$A2)*(RIGHT(!$C:$C)="1")
=SUMPRODUCT(($N:$N=$A2)*(RIGHT(!$C:$C)="2")
=SUMPRODUCT(($N:$N=$A2)*(LEFT($C:$C)="E"))

这是将添加具有这些值的列的数据框:

> str(FinalPars)
'data.frame':   10038 obs. of  3 variables:
 $ ID: int  11 13 18 22 39 181 182 183 191 192 ...
 $ Minimum     : num  15 6 1.71 1 1 4.39 2.67 5 5 2 ...
 $ Maximum     : num  15 6 2 1 1 5.48 3.69 6.5 5 2 ...

这是 ItemID 将与之匹配的数据集(这是每个项目存储的所有位置的主列表):

> str(StorageLocations)    
'data.frame':   14080 obs. of  3 variables:
     $ ID                           : int  1 2 3 4 5 6 7 8 9 10 ...
     $ CLASSIFICATION               : Factor w/ 3 levels "Central 1","Central 2",..: 3 3 3 1 2 3 3 1 2 3 ...
     $ Cart Descr                   : Factor w/ 145 levels "Closet1",..: 36 41 110 1 99 58 60 14 99 60 ...

存储位置数据帧样本:

ID     Classification     Cart Descr
123    Central 1          Main Store Room
123    Central 2          Secondary Store Room
123    External           Closet 1
123    External           Closet 2
123    External           Closet 3

所以上面的输出将作为新列 Central 1、Central 2 和 External 添加到数据框 total pars,并计算项目在这些位置被 IDd 的次数:

ID    Minimum    Maximum   Central 1   Central 2   External
123     10        15          1            1          3

This was my output in Excel - a Count of the # of times an item was identified as Central 1, Central 2, or External

如果有人知道 R 中的类似公式那就太好了!

如果没有示例数据,很难知道您真正要求的是什么。我在下面制作了一个例子。

Location <- c(rep(1,4), rep(2,4), rep(3,4))
Item_Id <- c(rep(1,2),rep(2,3),rep(1,2),rep(2,2),rep(1,3))
Item_Id_Want_to_Match <- 1

df <- data.frame(Location, Item_Id)

> df
   Location Item_Id
1         1       1
2         1       1
3         1       2
4         1       2
5         2       2
6         2       1
7         2       1
8         2       2
9         3       2
10        3       1
11        3       1
12        3       1

sum(ifelse(df$Location == 1 & df$Item_Id == Item_Id_Want_to_Match, df$Item_Id*df$Location,0))

> sum(ifelse(df$Location == 1 & df$Item_Id == Item_Id_Want_to_Match, df$Item_Id*df$Location,0))
[1] 2

编辑:

ID <- rep(123,5)
Classification <- c("Central 1", "Central 2", rep("External",3))

df <- data.frame(ID, Classification)
df$count <- 1

ID2 <- 123
Min <- 10
Max <- 15

df2 <- data.frame(ID2, Min, Max)

library(dplyr)
count_df <- df %>% 
  group_by(ID, Classification) %>% 
  summarise(count= sum(count))

> count_df
Source: local data frame [3 x 3]
Groups: ID

   ID Classification count
1 123      Central 1     1
2 123      Central 2     1
3 123       External     3

library(reshape)
new_df <- recast(count_df, ID~Classification, id.var=c("ID", "Classification"))
> new_df
   ID Central 1 Central 2 External
1 123         1         1        3

merge(new_df, df2, by.x="ID", by.y="ID2")

> merge(new_df, df2, by.x="ID", by.y="ID2")
   ID Central 1 Central 2 External Min Max
1 123         1         1        3  10  15