R中新列中值的计数

Count of a value in a new column in R

我有一个以交易 ID 和产品名称作为列的数据框。我正在尝试创建一个第三列,它为我提供交易 ID 的计数。最终数据框应如下所示。

    TID       Product        Orders         
    100       iPhone           2  
    100       Samsung          2  
    101       Lenovo           3  
    101       iPad             3  
    101       Galaxy           3  
    102       iPhone           1  
    103       HTC              1  

我尝试使用长度函数,但它给出了整个列的长度,而不是单个 TID 的长度。

df$Orders <- length(df$Tid)  

我也试过使用 sqldf 函数,如图所示。但这只给出了不同的 TID 值。

test <- sqldf("Select TID, count(TID) as Orders, Product from df Group By TID")

我们可以使用其中一个按组聚合的函数。使用 dplyr,我们按 'TID' 列分组,使用 mutate[= 创建一个新列 'Orders' 作为每组 (n()) 内的观察数22=]

library(dplyr)
df1 %>%
  group_by(TID)%>%
  mutate(Orders=n())
#    TID Product Orders
#1 100  iPhone      2
#2 100 Samsung      2
#3 101  Lenovo      3
#4 101    iPad      3
#5 101  Galaxy      3
#6 102  iPhone      1
#7 103     HTC      1

或使用 data.table,我们将 'data.frame' 转换为 'data.table' (setDT(df1))。按 'Product' 分组,我们创建一个新列 ('Orders') 作为每个组 (.N) 中的观察数。

library(data.table)
setDT(df1)[, Orders:=.N, by=Product] 

或带有 sqldf 的选项,其中我们 left join 原始数据集和修改后的数据集。

library(sqldf)
sqldf('Select * from df1
       left join(select TID, 
        count(TID) as Orders 
        from df1
        group by TID) 
        using (TID)')
    using (TID)')
#  TID Product Orders
#1 100  iPhone      2
#2 100 Samsung      2
#3 101  Lenovo      3
#4 101    iPad      3
#5 101  Galaxy      3
#6 102  iPhone      1
#7 103     HTC      1

数据

df1 <- structure(list(TID = c(100L, 100L, 101L, 101L, 101L, 102L, 103L
), Product = c("iPhone", "Samsung", "Lenovo", "iPad", "Galaxy", 
"iPhone", "HTC")), .Names = c("TID", "Product"), row.names = c(NA, 
-7L), class = "data.frame")

您可以使用 data.table 包:

library(data.table)
setDT(df)
df[, .(Orders = .N), by = Product]

基础包:

df1$count <- ave(df1$TID, df1$TID, FUN=length)

输出:

  TID Product count
1 100  iPhone     2
2 100 Samsung     2
3 101  Lenovo     3
4 101    iPad     3
5 101  Galaxy     3
6 102  iPhone     1
7 103     HTC     1