Modérateur : Groupe des modérateurs
Code : Tout sélectionner
df <- data.frame(expo = c("belle vue,sans vis-à-vis","belle vue","sans vis-à-vis","exposé sud","exposé sud,belle vue","belle vue,sans vis-à-vis,exposé sud"),stringsAsFactors = F)
df
expo
1 belle vue,sans vis-à-vis
2 belle vue
3 sans vis-à-vis
4 exposé sud
5 exposé sud,belle vue
6 belle vue,sans vis-à-vis,exposé sud
Code : Tout sélectionner
items <- c("belle vue","sans vis-à-vis","exposé sud")
str <- strsplit(df$expo, ",")
str
[[1]]
[1] "belle vue" "sans vis-à-vis"
[[2]]
[1] "belle vue"
[[3]]
[1] "sans vis-à-vis"
[[4]]
[1] "exposé sud"
[[5]]
[1] "exposé sud" "belle vue"
[[6]]
[1] "belle vue" "sans vis-à-vis" "exposé sud"
Code : Tout sélectionner
str_in <- sapply(str, function(x) items %in% x)
str_in
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] TRUE TRUE FALSE FALSE TRUE TRUE
[2,] TRUE FALSE TRUE FALSE FALSE TRUE
[3,] FALSE FALSE FALSE TRUE TRUE TRUE
Code : Tout sélectionner
df <- data.frame(df, t(str_in))
names(df) <- c("expo", items)
df
expo belle vue sans vis-à-vis exposé sud
1 belle vue,sans vis-à-vis TRUE TRUE FALSE
2 belle vue TRUE FALSE FALSE
3 sans vis-à-vis FALSE TRUE FALSE
4 exposé sud FALSE FALSE TRUE
5 exposé sud,belle vue TRUE FALSE TRUE
6 belle vue,sans vis-à-vis,exposé sud TRUE TRUE TRUE
Code : Tout sélectionner
df$belle_vue <- grepl("belle vue", df$expo)
Code : Tout sélectionner
mods <- unique(unlist(strsplit(df$expo, ",")))
sapply(mods, grepl, df$expo)
Code : Tout sélectionner
library(tidyr)
library(dplyr)
df <- data.frame(expo = c("belle vue,sans vis-à-vis","belle vue","sans vis-à-vis","exposé sud","exposé sud,belle vue","belle vue,sans vis-à-vis,exposé sud"),stringsAsFactors = F)
tmp<-df %>% unnest(expo2 = strsplit(expo, ","))
spread(count(tmp, expo, expo2), expo2, n, fill = 0) %>% mutate_if(is.numeric,as.logical)
# A tibble: 6 x 4
expo `belle vue` `exposé sud` `sans vis-à-vis`
<chr> <lgl> <lgl> <lgl>
1 belle vue TRUE FALSE FALSE
2 belle vue,sans vis-à-vis TRUE FALSE TRUE
3 belle vue,sans vis-à-vis,exposé sud TRUE TRUE TRUE
4 exposé sud FALSE TRUE FALSE
5 exposé sud,belle vue TRUE TRUE FALSE
6 sans vis-à-vis FALSE FALSE TRUE
Code : Tout sélectionner
library(tidyverse)
tibble(expo = c("belle vue,sans vis-à-vis","belle vue","sans vis-à-vis","exposé sud","exposé sud,belle vue","belle vue,sans vis-à-vis,exposé sud")) %>%
rownames_to_column() %>%
unnest(expo2 = strsplit(expo, ",")) %>%
spread(expo2, rowname) %>%
mutate_at(-1, function(x) !is.na(x))
Code : Tout sélectionner
library(dplyr)
library(tidyr)
items <- c("belle vue", "exposé sud", "sans vis-à-vis")
df %>%
mutate(expo_copy = expo) %>% # (étape facultative)
separate_rows(expo, sep = ", *") %>%
spread(expo, expo) %>%
mutate_at(items, Negate(is.na))
Code : Tout sélectionner
df <- data.frame(expo = c("belle vue,sans vis-à-vis","belle vue","sans vis-à-vis","exposé sud","exposé sud,belle vue","belle vue,sans vis-à-vis,exposé sud"),stringsAsFactors = F)
df %>%
mutate(expo_copy = expo) %>%
separate_rows(expo_copy, sep = ", *") %>%
spread(expo_copy, expo_copy) %>%
mutate_at(items, Negate(is.na))
Error in parse(text = x) : <text>:1:7: unexpected symbol
1: belle vue
Code : Tout sélectionner
df2 <- df[sample(1:nrow(df), 1e4, rep = T),]
df %>%
mutate(expo_copy = expo) %>%
separate_rows(expo_copy, sep = ", *") %>%
spread(expo_copy, expo_copy) %>%
select(-expo) %>% mutate_all(Negate(is.na))
# ok
df2 %>%
mutate(expo_copy = expo) %>%
separate_rows(expo_copy, sep = ", *") %>%
spread(expo_copy, expo_copy) %>%
select(-expo) %>% mutate_all(Negate(is.na))
Erreur : Duplicate identifiers for rows (23, 30, ...
df3 <- as.tibble(df2)
df3 %>%
rownames_to_column() %>%
unnest(expo2 = strsplit(expo, ",")) %>%
spread(expo2, rowname) %>%
mutate_at(-1, function(x) !is.na(x))
Code : Tout sélectionner
df2 %>%
mutate(expo_copy = expo) %>%
separate_rows(expo_copy, sep = ", *") %>%
mutate(ID = 1:n()) %>%
spread(expo_copy, expo_copy) %>%
select(-expo, -ID) %>% mutate_all(Negate(is.na))
Code : Tout sélectionner
mic1 <- microbenchmark(Sapply = sapply(items, grepl, df2$expo),
Tidyr = {
df2 %>%
mutate(expo_copy = expo) %>%
separate_rows(expo_copy, sep = ", *") %>%
mutate(ID = 1:n()) %>%
spread(expo_copy, expo_copy) %>%
select(-expo, -ID) %>% mutate_all(Negate(is.na))
})
mic1
Unit: milliseconds
expr min lq mean median uq max neval
Sapply 7.540157 7.590186 8.820972 7.674762 9.775775 16.79412 100
Tidyr 156.896432 159.980835 177.452730 164.693905 178.504249 310.81531 100
Retourner vers « Questions en cours »
Utilisateurs parcourant ce forum : Google [Bot] et 1 invité