gpt4 book ai didi

r - 计算多个列中重复值的出现次数

转载 作者:行者123 更新时间:2023-12-05 08:35:52 33 4
gpt4 key购买 nike

我的问题非常类似于: R: Count occurrences of value in multiple columns

但是,那里提出的解决方案对我不起作用,因为在同一行中,该值可能出现两次,但我只想计算它出现的行数。我已经制定了解决方案,但似乎太长了:

> toy_data = data.table(from=c("A","A","A","C","E","E"), to=c("B","C","A","D","F","E"))
> toy_data
from to
1: A B
2: A C
3: A A
4: C D
5: E F
6: E E
> #get a table with intra-link count
> A = data.table(table(unlist(toy_data[from==to,from ])))
> A
V1 N
1: A 1
2: E 1
A #get a table with total count
> B = data.table(table(unlist(toy_data[,c(from,to)])))
> B
V1 N
1: A 4
2: B 1
3: C 2
4: D 1
5: E 3
6: F 1
>
> # concatenate changing sign
> table = rbind(B,A[,.(V1,-N)],use.names=FALSE)
> # groupby and subtract
> table[,sum(N),by=V1]
V1 V1
1: A 3
2: B 1
3: C 2
4: D 1
5: E 2
6: F 1

是否有一些函数可以用更少的行来完成这项工作?我想在 python 中我会连接 match() 和 match(),但是找不到正确的语法

编辑:我知道这会起作用 A=length(toy_data[from=="A"|to=="A",from]) 但我想避免在各种 "A","B"...(我不知道如何以这种方式格式化输出)

最佳答案

你可以试试下面的代码

> toy_data[, to := replace(to, from == to, NA)][, data.frame(table(unlist(.SD)))]
Var1 Freq
1 A 3
2 B 1
3 C 2
4 D 1
5 E 2
6 F 1

toy_data %>%
mutate(to = replace(to, from == to, NA)) %>%
unlist() %>%
table() %>%
as.data.frame()

给出

  . Freq
1 A 3
2 B 1
3 C 2
4 D 1
5 E 2
6 F 1

关于r - 计算多个列中重复值的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71622303/

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