gpt4 book ai didi

r - 对于 R 中的其他剩余列值,如何检查一种类型的列值类别的常见出现?

转载 作者:行者123 更新时间:2023-12-02 16:06:46 24 4
gpt4 key购买 nike

虚拟数据:

set.seed(4)
name <- sample(LETTERS[1:8], 500, replace = T)
id <- round(runif(500, min=1, max=200))

df <- data.frame(name, id)

我想检查 B 的唯一 id 的百分比,其他剩余的 name

预期的输出将是这样的:

name  count pct_common
<chr> <int> <dbl>
1 A 17 29.3
2 C 18 31.0
3 D 16 27.6
4 E 22 37.9
5 F 14 24.1
6 G 16 27.6
7 H 20 34.5

到目前为止我的方法:

the_name <- 'B'

#Selecting the unique name, id combination for 'B'

df %>%
filter(name %in% the_name) %>%
distinct(name, id)-> list_id

#Checking which of these ids are already there for other names and then count them.

df %>%
filter( id %in% list_id$id) %>%
filter(!name %in% the_name) %>%
group_by(name) %>%
summarise(count=n()) %>%
mutate(pct_common= count/nrow(list_id)*100)

它正在完成工作,但像这样创建一个单独的数据框似乎不太优雅。此外,相对较大的数据框(数百万个观察值)需要更多时间。

有没有更好的方法来解决这个问题?

最佳答案

这是另一种选择-

library(dplyr)

df %>%
mutate(temp = n_distinct(id[name %in% the_name])) %>%
filter(id %in% unique(id[name %in% the_name]) & !name %in% the_name) %>%
group_by(name, temp) %>%
summarise(count = n(), .groups = 'drop') %>%
mutate(pct_common = count/temp * 100) %>%
select(-temp)

# name count pct_common
# <chr> <int> <dbl>
#1 A 17 29.3
#2 C 18 31.0
#3 D 16 27.6
#4 E 22 37.9
#5 F 14 24.1
#6 G 16 27.6
#7 H 20 34.5

关于r - 对于 R 中的其他剩余列值,如何检查一种类型的列值类别的常见出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69245284/

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