我有一个数据表df
,我想按第一列“位置”将其分组,
并计算所有表格(包括列和行)中条目的出现频率:
df
location NN_1 NN_2 NN_3
NYC 17 17 17
NYC 17 16 1
LA 1 1 10
LA 16 10 1
可以通过以下方式获得:
df <- structure(list(location = c("NYC", "NYC", "LA", "LA"),
NN_1 = c(17, 17, 1, 16),
NN_2 = c(17, 16, 1, 10),
NN_3 = c(17, 1, 10, 1)),
class = "data.frame",
row.names = c(NA, -4L))
我想计算给定位置(例如17
)重复NYC
的次数:
output
location NNs freq
NYC 17 4
NYC 16 1
NYC 1 1
LA 1 3
LA 16 1
LA 10 2
答案 0 :(得分:2)
可能的tidyverse解决方案:
df %>%
gather("key", "NNs", 2:ncol(.)) %>%
group_by(location, NNs) %>%
summarize(freq = n()) %>%
arrange(desc(location), desc(NNs))
答案 1 :(得分:2)
Base R解决方案,有效地执行与tidyverse解决方案相同的操作。将第一个location
列标识符放在其他所有列上,然后列表:
as.data.frame(table(cbind(df[1], NNs=unlist(df[-1]))))
# location NNs Freq
#1 LA 1 3
#2 NYC 1 1
#3 LA 10 2
#4 NYC 10 0
#5 LA 16 1
#6 NYC 16 1
#7 LA 17 0
#8 NYC 17 4