gpt4 book ai didi

r - 在 R 中,将一列值与所有其他列进行比较

转载 作者:行者123 更新时间:2023-12-04 00:42:23 25 4
gpt4 key购买 nike

我是 R 的新手,我有一个问题对于这里的专家来说可能非常简单。

假设我有一个表“sales”,其中包含 4 个客户 ID (123-126) 和 4 个产品(A、B、C、D)。

ID  A   B   C   D
123 0 1 1 0
124 1 1 0 0
125 1 1 0 1
126 0 0 0 1

我想计算产品之间的重叠。所以对于 A,同时具有 A 和 B 的 ID 的数量将为 2。同样,A 和 C 之间的重叠将为 0,A 和 D 之间的重叠将为 1。这是我的 A 和 B 重叠代码:

overlap <- sales [which(sales [,"A"] == 1 & sales [,"B"] == 1 ),]
countAB <- count(overlap,"ID")

我想对所有 4 种产品重复此计算,因此 A 与 B、C、D 重叠,B 与 A、C、D 重叠,等等...我如何更改代码来完成此操作?

我希望最终输出是每个两种产品组合的 ID 数。这是产品亲和性练习,我想找出一种产品,哪种产品销量最高。例如,对于 A,最畅销的产品是 B,其次是 D,然后是 C。我认为需要在代码中添加一些排序才能实现这一点。

感谢您的帮助!

最佳答案

    #x1 is your dataframe
x1<-structure(list(ID = 123:126, A = c(0L, 1L, 1L, 0L), B = c(1L,
1L, 1L, 0L), C = c(1L, 0L, 0L, 0L), D = c(0L, 0L, 1L, 1L)), .Names = c("ID",
"A", "B", "C", "D"), class = "data.frame", row.names = c(NA,
-4L))
#get the combination of all colnames but the first ("ID")
k1<-combn(colnames(x1[,-1]),2)
#create two lists a1 and a2 so that we can iterate over each element
a1<-as.list(k1[seq(1,length(k1),2)])
a2<-as.list(k1[seq(2,length(k1),2)])
# your own functions with varying i and j
mapply(function(i,j) length(x1[which(x1[,i] == 1 & x1 [,j] == 1 ),1]),a1,a2)
[1] 2 0 1 1 1 0

关于r - 在 R 中,将一列值与所有其他列进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28639040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com