根据R中的三列计算频率

时间:2015-07-29 13:18:33

标签: r frequency

这是我的数据框

id    ingredient1    ingredient2    ingredient3
1      apple            milk           cheese
5      pear             apple          
3      lettuces         tomato         salt
12     ribs             tomato         salt
20     cheese           milk           tomato
... ...

这里有超过200行 我知道如何通过表格获取频率。但在这里,我真的不知道该怎么做。 这是我想要的理想输出:

var     freq
apple     2
milk      2
cheese    2
pear      1
lettuces  1
tomato    3
salt      2
ribs      1
... ... 

2 个答案:

答案 0 :(得分:8)

假设您想要所有'成分的总频率。在列中,我们通过删除第一列(df1[-1])来对数据集进行子集,然后unlist将其设为vector,并使用table获取唯一元素的频率。如果您需要data.frame输出,我们可以使用as.data.frame包装它。

res <- as.data.frame(table(unlist(df1[-1])))

我在成分列中找到了一些空白元素''。如果你想删除它,

subset(res, Var1!='')
#      Var1 Freq
#2    apple    2
#3   cheese    2
#4 lettuces    1
#5     milk    2
#6     pear    1
#7     ribs    1
#8     salt    2
#9   tomato    3

答案 1 :(得分:3)

你可以尝试:

library(dplyr)
library(tidyr)

df %>% 
  gather(key, value, -id) %>% 
  group_by(ingredient = value) %>% 
  tally()

给出了:

#Source: local data frame [9 x 2]
#
#  ingredient n
#1      apple 2
#2     cheese 2
#3   lettuces 1
#4       milk 2
#5       pear 1
#6       ribs 1
#7       salt 2
#8     tomato 3
#9         NA 1