我想通过' |'将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
答案 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