在dplyr管道中组合ifelse语句mutate和sequence

时间:2017-01-27 15:45:08

标签: r if-statement dplyr

我想替换像这样的D3.js气泡图中的城市名称 How to display d3 bubbles in different colors for a dataset with one branch and many children?

我有很多"小城市"可视化,我想用ID替换他们的标签。为了更好地展示(并创建一个图例)。

这是一个小例子

cities <- c("Brest", "Rennes", "Rennes", "Rennes", "Nantes", "Lorient") 
dataset <- data.frame(cities)  
dataset

dataset <- dataset %>%
count(cities)

这是我的结果:n = 1(1 =&#34;小城市&#34;)

cities     1
Brest      1
Lorient    1
Nantes     1
Rennes     3

小城市=

我的期望:

n = 1的城市的ID序列(1 =&#34;小城市&#34;)

cities     n     id_sequence
Brest      1     1
Lorient    1     2
Nantes     1     3
Rennes     3     NA

我正在努力完成我的管道而没有成功:

dataset <- dataset %>%
   count(cities) %>% 
   mutate (id_sequence = ifelse (n = 1:length(cities))

感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

您可以按照以下方式执行此操作:

dataset %>%
   count(cities) %>%
   group_by(n) %>%
   mutate(id_sequence = ifelse(n == 1, 1:n(), NA))
## Source: local data frame [4 x 3]
## Groups: n [2]
## 
##    cities     n id_sequence
##    <fctr> <int>       <int>
## 1   Brest     1           1
## 2 Lorient     1           2
## 3  Nantes     1           3
## 4  Rennes     3          NA

这里的想法是按包含计数的列进行分组。在mutate()内,n()将给出每组中的行数。对于n == 1n()将返回3的小组。

答案 1 :(得分:2)

我们可以尝试

dataset %>% 
    count(cities) %>% 
    group_by(grp = n==1) %>%
    mutate(id_sequence = row_number()*NA^!grp) %>%
    ungroup() %>% 
    select(-grp)
#    cities     n id_sequence
#    <fctr> <int>       <dbl>
#1   Brest     1           1
#2 Lorient     1           2
#3  Nantes     1           3
#4  Rennes     3          NA

答案 2 :(得分:1)

dplyr不是要求时:

cities <- c("Brest", "Rennes", "Rennes", "Rennes", "Nantes", "Lorient") 
dataset <- data.frame(cities)  
dataset

dataset <- dataset %>%
  count(cities)

dataset$id_sequence <- NA

sequence <- seq(dim(dataset[dataset$n == 1,])[1])

dataset[dataset$n == 1,]$id_sequence <- sequence