Добавление выходных данных by() в фрейм данных

#r #dataframe #append

#r #фрейм данных #добавить

Вопрос:

У меня есть следующий df:

             cat1             cat2                         cat3 rnumb rstar NA    cat4 cat5
1           Appliances Small Appliances                 Coffee Maker  <NA>  <NA> NA    <NA>   NA
8      Health amp; Beauty           Beauty                   Hair Care   <NA>  <NA> NA Shampoo   NA
9  Holiday Gift Centre       Gift Ideas         Gifts for the Family  <NA>  <NA> NA    <NA>   NA
22     Health amp; Beauty    Personal Care                      Shaving  <NA>  <NA> NA  Razors   NA
23     Health amp; Beauty    Personal Care Deodorants amp; Antiperspirants  <NA>  <NA> NA    <NA>   NA
25     Health amp; Beauty    Personal Care                Feminine Care  <NA>  <NA> NA    <NA>   NA
 

У меня есть количество уникальных cat2 и cat3 для каждого cat1, использующего by()

tot.cat2 <- by(x1, x1$ cat1, длина функции (x) (уникальная (x $ cat2)))

 pur.new$cat1: Apparel
[1] 9
----------------------------------------------------------------------------------------------- 
pur.new$cat1: Appliances
[1] 3
----------------------------------------------------------------------------------------------- 
pur.new$cat1: Automotive
[1] 7
----------------------------------------------------------------------------------------------- 
pur.new$cat1: Baby
[1] 13
----------------------------------------------------------------------------------------------- 
pur.new$cat1: Electronics
[1] 16
----------------------------------------------------------------------------------------------- 
pur.new$cat1: Furniture 
[1] 9
 

Как мне добавить эти значения в первый фрейм данных? В идеале, в x1 для каждой строки, в которой есть устройства, я хочу, чтобы еще один столбец имел номер 3, номер уникального cat2 в устройствах.

Комментарии:

1. Вы могли бы использовать aggregate , т.е. aggregate(cat2~cat1, x1, FUN = function(x) length(unique(x)))

2. @akrun x$tot.cat2 <- aggregate(cat2~cat1, x1, FUN = function(x) length(unique(x))) выдает ошибку replacement has 18 rows, data has 25732

3. aggregate Результатом является фрейм данных. Вы пытаетесь назначить data.frame столбцу. Просто делай x2 <- aggregate(cat2~cat1, x1, FUN = function(x) length(unique(x)))