Tid <- c(1,1,2,2,2,3,4,4)
Uid <- c(10,10,11,11,12,13,10,14)
Data <- data.frame(Tid,Uid)
Run Code Online (Sandbox Code Playgroud)
我想知道每个Tid上有多少不同的Uid.我的结果应该是这样的.
Tid, freqUid
1, 1
2, 2
3, 1
4, 2
Run Code Online (Sandbox Code Playgroud)
我试图在它上面使用count但是在一个变量上使用它有一些问题.
基地R
as.data.frame(table(unique(Data)$Tid))
# Var1 Freq
# 1 1 1
# 2 2 2
# 3 3 1
# 4 4 2
Run Code Online (Sandbox Code Playgroud)
或者(尽管列名信息量较少)
aggregate(Uid ~ Tid, unique(Data), length)
# Tid Uid
# 1 1 1
# 2 2 2
# 3 3 1
# 4 4 2
Run Code Online (Sandbox Code Playgroud)
这里的基本思想是仅对独特的组合进行操作Tid/Uid,然后对不同的Tid实例进行计数
编辑:根据@nicolas评论,我们也可以在tapply这里添加一个可能的解决方案
as.data.frame.table(tapply(Data$Uid, Data$Tid, function(x) length(unique(x))))
# Var1 Freq
# 1 1 1
# 2 2 2
# 3 3 1
# 4 4 2
Run Code Online (Sandbox Code Playgroud)