gpt4 book ai didi

r - 计算字符串中逗号分隔的唯一值

转载 作者:行者123 更新时间:2023-12-04 11:26:59 25 4
gpt4 key购买 nike

数据框的前两列构成一个复合键,有一列 char 类型包含逗号分隔的整数。我的目标是制作一列,其中包含字符串中唯一整数的计数。
我知道使用 str_split_fixed 将字符串转换为列然后计算唯一值的方法,但是由于字符串的长度,添加了大量列并且一切都滞后。有没有其他方法?
实际数据集包含 500k 行和 53 列。
示例数据集:
df

c1      c2    c3  
aa 11 1,13,4,5,4,7,9
bb 22 2,5,2,4,5,7,11,
cc 33 11,14,3,1,
dd 44 1,1,2,4,5,6,15,
ee 55 4,3,3,1,14,17,

所需的输出:
c1        c2             c3             c4  
------ | ------ | ------ | -----
aa | 11 | 1,13,4,5,4,7,9 | 6
------ | ------ | ------ | -----
bb | 22 | 2,5,2,4,5,7,11, | 5
------ | ------ | ------ | -----
cc | 33 | 11,14,3,1, | 4
------ | ------ | ------ | -----
dd | 44 | 1,1,2,4,5,6,15, | 6
------ | ------ | ------ | -----
ee | 55 | 4,3,3,1,7,17,7, | 5
------ | ------ | ------ | -----

任何帮助,将不胜感激!

最佳答案

使用 strsplituniqueN来自 data.table -包裹:

df$c4 <- sapply(strsplit(df$c3,','), uniqueN)

这使:
> df
c1 c2 c3 c4
1 aa 11 1,13,4,5,4,7,9 6
2 bb 22 2,5,2,4,5,7,11, 5
3 cc 33 11,14,3,1, 4
4 dd 44 1,1,2,4,5,6,15, 6
5 ee 55 4,3,3,1,14,17, 5

注意:如果 df$c3是一个因子变量,将其包裹在 as.character 中: sapply(strsplit(as.character(df$c3), ','), uniqueN)
另一个用于创建的基本 R 替代方案 df$c4 :
sapply(regmatches(df$c3, gregexpr('\\d+', df$c3)), function(x) length(unique(x)))

一个 tidyverse选择:
library(dplyr)
library(tidyr)
df %>%
separate_rows(c3) %>%
filter(c3 != '') %>%
group_by(c1) %>%
summarise(c4 = n_distinct(c3)) %>%
left_join(df, .)

关于r - 计算字符串中逗号分隔的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43930456/

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