今天我有一个非常棘手的问题(至少对我而言)。我有一个我想要的数据框,如果有意义的话,总结来自同一位置的客户端数量。每个客户都有一个唯一的ID,但他们可能会购买几个产品,因此ID会再次出现。
我给你举个例子,这样更容易。这是缩短的DF:
ID LOC
1 "Buenos Aires"
1 "Buenos Aires"
2 "Santa fe"
3 "Mendoza"
4 "Mendoza"
4 "Mendoza"
5 "Neuquen"
6 "Neuquen"
7 "Neuquen"
我想把那个DF变成这样的东西:
LOC Value
Buenos Aires 1
Santa fe 1
Mendoza 2
Neuquen 3
因此,具有不同LOC
个号码的所有id
(“位置”)互相吸引,这样我就可以知道每个位置内的客户端数量。
答案 0 :(得分:1)
您在每个ids
的唯一LOC
之后,然后您想要计算每一个table
,所以请在unique
周围使用table(unique(d)$LOC)
# Buenos Aires Mendoza Neuquen Santa fe
# 1 2 3 1
# and for a data.frame:
# as.data.frame(table(unique(d)$LOC))
# Var1 Freq
# 1 Buenos Aires 1
# 2 Mendoza 2
# 3 Neuquen 3
# 4 Santa fe 1
d <- read.table(text='ID LOC
1 "Buenos Aires"
1 "Buenos Aires"
2 "Santa fe"
3 "Mendoza"
4 "Mendoza"
4 "Mendoza"
5 "Neuquen"
6 "Neuquen"
7 "Neuquen"', header=T)
数据(感谢@gung)
SELECT * FROM
CASE
WHEN 1=1 THEN `table_a`
ELSE `table_b`
END CASE;
答案 1 :(得分:0)
d <- read.table(text='ID LOC
1 "Buenos Aires"
1 "Buenos Aires"
2 "Santa fe"
3 "Mendoza"
4 "Mendoza"
4 "Mendoza"
5 "Neuquen"
6 "Neuquen"
7 "Neuquen"', header=T)
ds <- split(d, f=d$LOC)
sapply(ds, FUN=function(x){ length(table(x$ID)) })
# Buenos Aires Mendoza Neuquen Santa fe
# 1 2 3 1
答案 2 :(得分:0)
以下是使用data.table
library(data.table)
setDT(df1)[, .(Value=uniqueN(ID)), by = LOC]
# LOC Value
#1: Buenos Aires 1
#2: Santa fe 1
#3: Mendoza 2
#4: Neuquen 3
答案 3 :(得分:0)
DF <- data.frame(ID=c(1,1,2,3,4,4,5,6,7),LOC=c("Buenos Aires","Buenos Aires","Santa fe",
rep("Mendoza",3),rep("Neuquen",3)),stringsAsFactors = F)
for(i in unique(DF$LOC)){
DF$val[DF$LOC==i] <- length(unique(DF$ID[DF$LOC==i]))
}
DF <-DF[!duplicated(DF$LOC),]
print(DF)
ID LOC val
1 1 Buenos Aires 1
3 2 Santa fe 1
4 3 Mendoza 2
7 5 Neuquen 3