Получить количество непрерывных вхождений строки в столбце данных на основе другого столбца

Мне нужно выяснить, сколько раз одно значение встречается за другим в столбце определенного фрейма данных.

Основная логика заключается в том, чтобы получить отсутствие вхождений определенной строки на основе другого столбца.

Например:

df<- data.frame(fruits = c("apples", "apples", "orange", "pears", "apples", "pears", "pears", "papaya", "papaya"), 
                veggies = c("beans", "carrots", "carrots", "carrots", "brinjal","carrots", "brinjal", "brinjal", "beans"),
                branches=c( "Area1", "Area1", "Area1", "Area2","Area2","Area2", "Area2", "Area3", "Area3" ))

Это мой фрейм данных. мне нужно знать количество фруктов или овощей на основе столбца ветви

Когда я использую table(df$fruits)

выход:

apples-3 orange-1 papaya-2  pears-3

Выходные данные обычно показывают общее количество яблок и остальных фруктов для всех отраслей. Мне нужно получить счет точно для каждой ветви.

Мой требуемый вывод должен основываться на столбце df$Branches

for Area1
   apples-2 orange-1,
for Area2 
   pears-3 apples-1
for Area3 
   papaya-3

3 ответа

Возможно просто использовать ftable:

> ftable(fruits ~ branches, data = df)
         fruits apples orange papaya pears
branches                                  
Area1                2      1      0     0
Area2                1      0      0     3
Area3                0      0      2     0
> ftable(veggies ~ branches, data = df)
         veggies beans brinjal carrots
branches                              
Area1                1       0       2
Area2                0       2       2
Area3                1       1       0

Попробуй это:

library(data.table)
setDT(df)[,list(count=.N),list(branches, fruits)]

#   branches fruits count
#1:    Area1 apples     2
#2:    Area1 orange     1
#3:    Area2  pears     3
#4:    Area2 apples     1
#5:    Area3 papaya     2

Я не знаю ожидаемого результата, но вы можете получить количество, используя пакет dplyr:

Например:

library(dplyr)
df %>% count(fruits, branches)
# OR
count(df, fruits, branches)

Выход:

Source: local data frame [5 x 3]
Groups: fruits

  fruits branches n
1 apples    Area1 2
2 apples    Area2 1
3 orange    Area1 1
4 papaya    Area3 2
5  pears    Area2 3
Другие вопросы по тегам