这是我的数据框
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
... ...
答案 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