在dplyr中总结字符类型条件

时间:2018-02-08 18:16:15

标签: r dplyr summarize

我想计算一个国家单独列出的次数,并列出与其他国家/地区列出的时间。

这是 MY DATASET 的一部分:

address_countries2
name_countries      n_countries
China               1                      
China               1
Usa                 1                        
Usa                 1
China France        2               
China France        2
India               1                      
India               1
Jordan Germany      2             

我使用以下代码提取每个国家/地区的显示次数。

publication_countries <- address_countries2 %>% 
  select(name_countries, n_countries) %>% 
  unnest_tokens(word, name_countries) %>%
  group_by(word) %>% 
  summarise(TP = n())

 head(publication_countries)
 # A tibble: 6 x 2
    word          TP
    <chr>       <int>
   1 China         4
   2 Usa           2
   3 France        2
   4 India         2
   5 Jordan        1       
   6 Germany       1

我想创建一个新列,其中包含一个国家/地区列出的行数,以及第二列,其中列出了一个国家/地区与其他国家/地区列出的次数。

渴望输出 像这样:

 head(publication_countries)
 # A tibble: 6 x 2
    word          TP      single_times      with_other_countries
    <chr>       <int>            <int>                     <int>   
   1 China         4                2                         2
   2 Usa           2                2                         0
   3 France        2                0                         2
   4 India         2                2                         0
   5 Jordan        1                0                         1
   6 Germany       1                0                         1

从这个link我看到了一种可能的方法来总结条件,但是,在我的情况下,我需要使用与sum()不同的东西,因为我的条件对象是字符形式(列字) )。

summarise(TP = n() , IP = count(word[n_countries=="1"])) 

但是我收到了这个错误:

Error in summarise_impl(.data, dots) : 
  Evaluation error: no applicable method for 'groups' applied to an object of    class "character"

请任何帮助将不胜感激:)

非常感谢

1 个答案:

答案 0 :(得分:2)

dat%>% 
   select(name_countries, n_countries) %>% 
   unnest_tokens(word, name_countries) %>%
   group_by(word)%>%mutate(TP=n())%>%
   group_by(n_countries,word)%>%mutate(Tp1=n())%>%
   unique()%>%spread(n_countries,Tp1,0)
# A tibble: 6 x 4
# Groups:   word [6]
     word    TP   `1`   `2`
*   <chr> <int> <dbl> <dbl>
1   china     4     2     2
2  france     2     0     2
3 germany     1     0     1
4   india     2     2     0
5  jordan     1     0     1
6     usa     2     2     0