【问题标题】:Count unique/dinstinct words into a new column将唯一/独特的单词计数到新列中
【发布时间】:2018-02-05 11:18:19
【问题描述】:

我有一个数据集,每行有一列包含一组国家/地区。有时国家会重复不止一次,我想在下面的数据集中计算每行中唯一国家的数量:

> class(address_countries2$address_countries)
[1] "character"

> head(address_countries2)
                    address_countries
1                         China China
2                   China China China
3                         China China
4                         China China
5 China China China China China China
6                China China Uk China

所需的输出将是这样的新列:

                    address_countries n_countries
1                         China China           1
2                   China China China           1
3                         China China           1
4                         China China           1
5 China China China China China China           1
6                China China Uk China           2

这段代码给出了每行中的单词数:

address_countries2 <- address_countries2 %>% 
  select(address_countries) %>% 
  mutate(n_countries = str_count(address_countries, boundary("word")))


> head(address_countries2)
                    address_countries n_countries
1                         China China           2
2                   China China China           3
3                         China China           2
4                         China China           2
5 China China China China China China           6
6                China China Uk China           4

我尝试使用 str_count() 添加 unique() 以及 n_distinct() 和 distinct() 但我收到此错误:

Error in mutate_impl(.data, dots) : 
  Column `n_countries` must be length 34760 (the number of rows) or one, not 39

有什么建议吗?

【问题讨论】:

  • Stnge,您接受了一个不完整的答案,无法检查它是否有效......
  • 它有效。唯一需要改变的是“ist_country”变成“address_countries”,它可以工作:)

标签: r count unique


【解决方案1】:

您可以将address_countries 拆分成一个列表,然后使用n_distinct

library(purrr)
library(dplyr)
library(stringr)

df %>% 
  mutate(n_countries = map_int(address_countries, ~
                                 .x %>% 
                                 str_trim %>% 
                                 str_split(" ") %>% 
                                 unlist() %>% 
                                 n_distinct))

map_int 将逗号后的函数应用于address_countries 的每个元素并输出一个整数
str_trim 删除向量开头和结尾的空格
str_split 拆分向量,使用 " " 作为分割模式
unlist 将 str_split 的结果转换为向量
n_distinct 计算结果向量的唯一元素

数据

df <- tibble(address_countries = c("China China", "China China China", "China China", 
                                   "China China", "China China China China China China", 
                                   "China China Uk China"))

【讨论】:

    【解决方案2】:

    试试这个:

    你的数据框架

    address_countries2<-data.frame(address_countries=c("Chian","China China","China UK"))
    

    统计国家数量:

    list_country<-strsplit(as.character(address_countries2$address_countries)," ")
    list_country
    [[1]]
    [1] "Chian"
    
    [[2]]
    [1] "China" "China"
    
    [[3]]
    [1] "China" "UK"  
    

    添加“n_countries”列

    address_countries2$n_countries<-unlist(lapply(lapply(list_country, unique),length))
    

    输出

    address_countries2
            address_countries n_countries
            1             Chian           1
            2       China China           1
            3          China UK           2
    

    【讨论】:

    • 您没有指定list_country 的来源......因此答案现在不起作用
    【解决方案3】:

    这应该会给你你想要的:

    ac$n_countries <- lengths(lapply(strsplit(ac$countries, split = ' '), unique))
    

    结果:

    > ac
        countries n_countries
    1       Chian           1
    2 China China           1
    3    China UK           2
    

    数据:

    ac <- data.frame(countries = c("Chian","China China","China UK"), stringsAsFactors = FALSE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-21
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      相关资源
      最近更新 更多