gpt4 book ai didi

r - 查找数据框中包含特定对的组数

转载 作者:行者123 更新时间:2023-12-03 17:24:22 25 4
gpt4 key购买 nike

我正在尝试查找包含特定对的数据框中的组数。这是我所做的示例和所需的输出。

创建数据

df=data.frame(c("Sam","Sam","Sam","Jason", "Jason", "Kelly", "Kelly"),
c("e","f","g","h", "h", "e", "f"))

names(df)=c('name','value')

对查看未出现在至少一个特定名称中的对不感兴趣,因此我在生成对之前放弃了这些观察

df=df[!duplicated(df[1:2]),]

df=df[ave(rep(1, nrow(df)), df$name, FUN=length)>1,]

pairs=t(combn(unique(df$value), 2))

现在我有两个看起来像这样的对象

   name value
1 Sam e
2 Sam f
3 Sam g
6 Kelly e
7 Kelly f

[,1] [,2]
[1,] e f
[2,] e g
[3,] f g

我想要的输出

   pair.1    pair.2  occurrences
1 e f 2
2 e g 1
3 f g 1

最佳答案

我们通过“名称”合并数据集,通过“行”排序“值”列,将数据集转换为data.table,去掉'value'元素相同的行,按'value'列分组,得到nrow(.N)除以2。

d1 <- merge(df, df, by.x='name', by.y='name')
d1[-1] <- t(apply(d1[-1], 1, sort))
library(data.table)
setDT(d1)[value.x!=value.y][,.N/2 ,.(value.x, value.y)]
# value.x value.y V1
#1: e f 2
#2: e g 1
#3: f g 1

或者使用与@jeremycg 帖子中类似的方法

 setDT(df)[df, on='name', allow.cartesian=TRUE
][as.character(value)< as.character(i.value), .N, .(value, i.value)]

关于r - 查找数据框中包含特定对的组数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34514961/

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