根据R中的三列计算频率
Calculate freq based on three columns in R
这是我的数据框
id ingredient1 ingredient2 ingredient3
1 apple milk cheese
5 pear apple
3 lettuces tomato salt
12 ribs tomato salt
20 cheese milk tomato
... ...
这里有200多行
我知道如何通过 table 获得频率。但是在这里,我真的不知道该怎么做。
这是我想要的理想输出:
var freq
apple 2
milk 2
cheese 2
pear 1
lettuces 1
tomato 3
salt 2
ribs 1
... ...
假设您想要所有 'ingredient' 列的总频率,我们通过删除第一列 (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
你可以试试:
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
这是我的数据框
id ingredient1 ingredient2 ingredient3
1 apple milk cheese
5 pear apple
3 lettuces tomato salt
12 ribs tomato salt
20 cheese milk tomato
... ...
这里有200多行 我知道如何通过 table 获得频率。但是在这里,我真的不知道该怎么做。 这是我想要的理想输出:
var freq
apple 2
milk 2
cheese 2
pear 1
lettuces 1
tomato 3
salt 2
ribs 1
... ...
假设您想要所有 'ingredient' 列的总频率,我们通过删除第一列 (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
你可以试试:
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