按因子客户端ID

时间:2016-05-30 22:22:58

标签: r dataframe

今天我有一个非常棘手的问题(至少对我而言)。我有一个我想要的数据框,如果有意义的话,总结来自同一位置的客户端数量。每个客户都有一个唯一的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(“位置”)互相吸引,这样我就可以知道每个位置内的客户端数量。

4 个答案:

答案 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