一列的唯一计数 - 按分隔符和子字符串的唯一计数进行拆分

时间:2017-05-15 08:43:23

标签: r split count substring distinct

我想通过' |'将x列拆分的唯一计数x值和子串在R中留下2个字符。

None

我想要到达下面。

df <-data.frame(id = c(11,22,33,44),
                x = c(NA,'cna|cnb|jpa|usa|jpb|usb','kra|krb|kru|usb|usa','jpa|jpu|epa|epb|usa|woa|cna|jpu'))

> df
  id                               x
1 11                            <NA>
2 22         cna|cnb|jpa|usa|jpb|usb
3 33             kra|krb|kru|usb|usa
4 44 jpa|jpu|epa|epb|usa|woa|cna|jpu
  • 第1行是0
  • 第2行是cn,jp,us(3数据)
  • 第3行是kr,我们(2个数据)
  • 第4行是jp,ep,us,wo,cn(5数据)

2 个答案:

答案 0 :(得分:2)

这是另一种方法。它不像akrun的答案那样紧凑和简单,但它并不依赖于任何库:

df$count <- sapply(df$x, function(varx){
    strs <- unique(sapply(unlist(strsplit(varx, "|", fixed = T)), function(string){
        substr(string, 1, 2)
    })) 
    length(strs[!is.na(strs)])
})

<强>输出:

  id                               x count
1 11                            <NA>     0
2 22         cna|cnb|jpa|usa|jpb|usb     3
3 33             kra|krb|kru|usb|usa     2
4 44 jpa|jpu|epa|epb|usa|woa|cna|jpu     5

答案 1 :(得分:1)

我们可以使用0。我们将元素拆分为“x”并使用tidyverse扩展为长格式,separate_rows为“x”,只取前两个字符(mutate),按“id”分组,使用substr

查找count个唯一的非NA元素
n_distinct