2017-01-27 2 views
2

Я хочу, чтобы заменить название городов в пузырьковой диаграмме D3.js как этот How to display d3 bubbles in different colors for a dataset with one branch and many children?объединение IfElse оператора мутировать и последовательность в dplyr трубы

У меня есть много «малые города», чтобы визуализировать и я хочу, чтобы заменить их ярлыки по id. для лучшего отображения (и создания легенды).

Вот небольшой Exemple

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

dataset <- dataset %>% 
count(cities) 

Вот мой результат: п = 1 (1 = "малые города")

cities  1 
Brest  1 
Lorient 1 
Nantes  1 
Rennes  3 

малые города =

Что я ожидаю:

Последовательность идентификаторов для городов с n = 1 (1 = «небольшие города»)

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)) 

Благодарим Вас за помощь!

+0

Вы можете установить условие как последовательности. –

ответ

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 
+1

Это здорово @akrun! – Wilcar

+0

Могу ли я внести изменения в свой вопрос, заменив NA названиями городов @akrun? – Wilcar

+0

@Wilcar Вы можете использовать 'dataset%>% count (города)%>% group_by (grp = n == 1)%>% mutate (id_sequence = if_else (grp, as.character (row_number()), as.character (города)))%>% ungroup()%>% select (-grp) ' – akrun

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 == 1, n() вернется 3.

+0

Последовательность должна начинаться с 1 без пробелов для моей легенды. – Wilcar

+0

Это то, что делает это решение. – Stibu

+0

Благодарим вас за помощь. извините, но не в моем большом «реальном» наборе данных. – Wilcar

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