将多个变量分组 - R.

时间:2015-09-06 00:18:47

标签: r dplyr

我想对不同主题和不同用户的数据框进行分组,以生成该主题中每个用户的相对重要性表,例如我的数据框

Topic User
A     U1
A     U2
B     U2
A     U1
B     U1
A     U1

我想将它缩减为

Topic  User Importance
 A     U1    0.75
 A     U2    0.25
 B     U1    0.5
 B     U2    0.5

任何人都可以指出我如何使用R,最好是dplyr?

3 个答案:

答案 0 :(得分:5)

这是一种快速data.table替代方法

library(data.table)
setDT(df)[, as.data.table(table(User)/.N), by = Topic]
#    Topic User    N
# 1:     A   U1 0.75
# 2:     A   U2 0.25
# 3:     B   U1 0.50
# 4:     B   U2 0.50

这基本上只是按组运行table(User)并按组大小.N

划分

或者与dplyr

同时进行
df %>%
  group_by(Topic) %>%
  do(data.frame(table(.$User)/length(.$User)))

# Source: local data frame [4 x 3]
# Groups: Topic [2]
# 
#    Topic   Var1  Freq
#   (fctr) (fctr) (dbl)
# 1      A     U1  0.75
# 2      A     U2  0.25
# 3      B     U1  0.50
# 4      B     U2  0.50

答案 1 :(得分:3)

处理此问题的一种方法是分别按主题/主题用户计算并加入结果:

!false == true

答案 2 :(得分:3)

另一种方式:

as.data.frame(prop.table(table(DF), margin = 1))
#  Topic User Freq
#1     A   U1 0.75
#2     B   U1 0.50
#3     A   U2 0.25
#4     B   U2 0.50