首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >把唯一的/本能的单词数到新的列中

把唯一的/本能的单词数到新的列中
EN

Stack Overflow用户
提问于 2018-02-05 11:18:19
回答 3查看 1.6K关注 0票数 0

我有一个具有列的数据集,其中包含一行中的一组国家。有时国家不止一次被重复,我想在我的数据集的每一行中计算出独特的国家数如下:

代码语言:javascript
复制
> 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

所需的输出将是如下所示的新列:

代码语言:javascript
复制
                    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

这段代码给出了每一行的字数:

代码语言:javascript
复制
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

我尝试过用n_distinct()以及str_count()添加unique()和distinct(),但是我得到了以下错误:

代码语言:javascript
复制
Error in mutate_impl(.data, dots) : 
  Column `n_countries` must be length 34760 (the number of rows) or one, not 39

有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-05 11:34:51

试试这个:

你的data.frame

代码语言:javascript
复制
address_countries2<-data.frame(address_countries=c("Chian","China China","China UK"))

国家数目:

代码语言:javascript
复制
list_country<-strsplit(as.character(address_countries2$address_countries)," ")
list_country
[[1]]
[1] "Chian"

[[2]]
[1] "China" "China"

[[3]]
[1] "China" "UK"  

加入"n_countries“栏

代码语言:javascript
复制
address_countries2$n_countries<-unlist(lapply(lapply(list_country, unique),length))

输出量

代码语言:javascript
复制
address_countries2
        address_countries n_countries
        1             Chian           1
        2       China China           1
        3          China UK           2
票数 1
EN

Stack Overflow用户

发布于 2018-02-05 11:41:12

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

代码语言:javascript
复制
library(purrr)
library(dplyr)
library(stringr)

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

map_int在comme之后将函数应用于address_countries的每个元素,并输出一个整数

str_trim移除向量开头和结尾处的空白

str_split拆分向量,使用" "作为分裂模式。

unlist将str_split的结果转化为向量

n_distinct计算结果向量的唯一元素。

数据

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-02-05 11:45:35

这应该给你你想要的:

代码语言:javascript
复制
ac$n_countries <- lengths(lapply(strsplit(ac$countries, split = ' '), unique))

结果:

代码语言:javascript
复制
> ac
    countries n_countries
1       Chian           1
2 China China           1
3    China UK           2

数据:

代码语言:javascript
复制
ac <- data.frame(countries = c("Chian","China China","China UK"), stringsAsFactors = FALSE)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48621428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档