gpt4 book ai didi

r - 查找 R 中匹配元素的数量

转载 作者:行者123 更新时间:2023-12-01 00:16:55 26 4
gpt4 key购买 nike

抱歉菜鸟问题!我正在尝试计算在篮子 x 中与篮子 y 匹配的元素数量。
我有以下数据:

user_id basket.x basket.y
1 1,2,3 2,3,4
2 5,6,7 1,2,7

我尝试了以下循环,但它不起作用
df["total"] <- 0
df["TP"] <- 0
for(i in 1:nrow(df)){
for(j in 1:nrow(df)){
if(all(df$basket.x[i] %in% df$basket.y[j])){
df$total <- total + 1
df$TP <- TP + 1
}
}
}

并返回:
user_id basket.x basket.y   total TP
1 1,2,3 2,3,4 0 0
2 5,6,7 1,2,7 0 0

然而,想要的结果是:
user_id basket.x basket.y   total TP
1 1,2,3 2,3,4 3 2
2 5,6,7 1,2,7 3 1

谁能指出我哪里出错了?
谢谢

运行 dput() :
structure(list(user_id = c(2957L, 7306L, 10219L, 11290L, 13222L, 
13554L), basket.x = c("13870,22963,1158,18362"),basket.y =
c("24852,432,47626,33647,6015,1158,24852,24852,24852")
), row.names = c(NA,
6L), class = "data.frame")

最佳答案

正如@JohnColeman 所指出的,您的 dput 有问题所以我使用的是那个和你原来的例子的组合。

df = structure(list(user_id = c(2957L, 7306L, 10219L), 
basket.x = c("13870,22963,1158,18362", "1,2,3", "5,6,7"),
basket.y = c("24852,432,47626,33647,6015,1158,24852,24852,24852",
"2,3,4", "1,2,7")
), row.names = c(1L,2L,3L), class = "data.frame")
df
user_id basket.x
1 2957 13870,22963,1158,18362
2 7306 1,2,3
3 10219 5,6,7
basket.y
1 24852,432,47626,33647,6015,1158,24852,24852,24852
2 2,3,4
3 1,2,7

使用这些数据,我们可以使用 strsplit 获取列表的各个元素。 .一旦我们有了元素,我们就可以使用 intersect找到同时存在于 basket.x 中的元素和 basket.y .要获得两个篮子共享的元素数量,我们只需取交集的长度即可。当然,我们需要将其应用于 df 的所有行。 .把这些放在一起,我们得到
sapply(1:nrow(df), function(i) 
length(intersect(strsplit(df$basket.x, ",")[[i]],
strsplit(df$basket.y, ",")[[i]])))
[1] 1 2 1

编辑
感谢@thelatemail 注意到我写这篇文章的方式效率很低。更好的是:
sapply(1:nrow(df), function(i) 
length(intersect(unlist(strsplit(df$basket.x[[i]], ",")),
unlist(strsplit(df$basket.y[[i]], ",")))))

关于r - 查找 R 中匹配元素的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51867982/

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