Modérateur : Groupe des modérateurs
Code : Tout sélectionner
dat <- read.table(
text = '
pix pixmoins pixmoins4
vert vert vert
vert noir vert
noir noir vert',
sep = " ",
header = TRUE
)
Code : Tout sélectionner
for(i in seq.int(nrow(data)))
Code : Tout sélectionner
library(dplyr)
Code : Tout sélectionner
data <- tibble(
pixel = c("vert", "vert", "vert", "vert", "noir", "vert", "noir", "noir", "vert")
)
# Les valeurs des pixels précédents
data2 <- data %>%
mutate(
pix_moins1 = lag(pixel, 1),
pix_moins4 = lag(pixel, 4)
) %>%
# de la meme manière les valeurs des positions
mutate(
position = 1:n(),
pos_moins1 = lag(position, 1),
pos_moins4 = lag(position, 4)
)
data2
Code : Tout sélectionner
## # A tibble: 9 x 6
## pixel pix_moins1 pix_moins4 position pos_moins1 pos_moins4
## <chr> <chr> <chr> <int> <int> <int>
## 1 vert <NA> <NA> 1 NA NA
## 2 vert vert <NA> 2 1 NA
## 3 vert vert <NA> 3 2 NA
## 4 vert vert <NA> 4 3 NA
## 5 noir vert vert 5 4 1
## 6 vert noir vert 6 5 2
## 7 noir vert vert 7 6 3
## 8 noir noir vert 8 7 4
## 9 vert noir noir 9 8 5
Code : Tout sélectionner
data2 %>%
mutate(
numero = case_when(
pixel == "vert" & pix_moins1 == "vert" ~ pos_moins1,
pixel == "vert" & pix_moins1 == "noir" & pix_moins4 == "vert" ~ pos_moins4,
# ...
TRUE ~ NA_integer_
)
)
Code : Tout sélectionner
## # A tibble: 9 x 7
## pixel pix_moins1 pix_moins4 position pos_moins1 pos_moins4 numero
## <chr> <chr> <chr> <int> <int> <int> <int>
## 1 vert <NA> <NA> 1 NA NA NA
## 2 vert vert <NA> 2 1 NA 1
## 3 vert vert <NA> 3 2 NA 2
## 4 vert vert <NA> 4 3 NA 3
## 5 noir vert vert 5 4 1 NA
## 6 vert noir vert 6 5 2 2
## 7 noir vert vert 7 6 3 NA
## 8 noir noir vert 8 7 4 NA
## 9 vert noir noir 9 8 5 NA
Code : Tout sélectionner
matpix=matrix(c(1,1,1,1,1,0.245,0.154,1,1,0.255,0.265,1,1,
0.544,0.111,1,1,1,1,1),nrow=5,ncol=4)
matpix2=as.vector(matpix)
matpix2=as.data.frame(matpix2)
for (i in 1:20)
{output[i]<-data.frame(c(i,i+1,i-1,i+4,i-4))}
colnames(output)=c(1:20)
tab=t(output)
data=cbind(matpix2,tab)
colnames(data)=c("couleur","i","i+1","i-1","i+4","i-4")
a=data$i
b=data$`i+1`
c=data$`i-1`
c[which(c == 0)] <- NA
d=data$`i+4`
e=data$`i-4`
e[which(e <= 0)] <- NA
data$pixplus1=data[data$i[b],1]
data$pixmoins1=data[data$i[c],1]
data$pixplus4=data[data$i[d],1]
data$pixmoins4=data[data$i[e],1]
data=data[,c(1,7:10)]
Code : Tout sélectionner
data2 %>%
mutate(
numero = case_when(
pixel == "vert" & pix_moins1 == "vert" ~ n,
pixel == "vert" & pix_moins1 == "noir" & pix_moins4 == "vert" ~ #n[pixel précédent],
pixel == "vert" & pix_moins1 == "noir" & pix_moins4 == "noir" ~# n+1, soit création d'un nouveau groupe,
TRUE ~ NA_integer_
)
)
Code : Tout sélectionner
> for (i in 1:20)
+ {output[i]<-data.frame(c(i,i+1,i-1,i+4,i-4))}
Error: object 'output' not found
Code : Tout sélectionner
output <- matrix(NA, 5, 20)
for (i in 1:20) {
output[, i]<-c(i,i+1,i-1,i+4,i-4)
}
Code : Tout sélectionner
couleur pixplus1 pixmoins1 pixplus4 pixmoins4
1 1.000 1.000 NA 1.000 NA
2 1.000 1.000 1.000 0.245 NA
3 1.000 1.000 1.000 0.154 NA
4 1.000 1.000 1.000 1.000 NA
5 1.000 0.245 1.000 1.000 1.000
6 0.245 0.154 1.000 0.255 1.000
7 0.154 1.000 0.245 0.265 1.000
8 1.000 1.000 0.154 1.000 1.000
9 1.000 0.255 1.000 1.000 1.000
10 0.255 0.265 1.000 0.544 0.245
11 0.265 1.000 0.255 0.111 0.154
12 1.000 1.000 0.265 1.000 1.000
13 1.000 0.544 1.000 1.000 1.000
14 0.544 0.111 1.000 1.000 0.255
15 0.111 1.000 0.544 1.000 0.265
16 1.000 1.000 0.111 1.000 1.000
17 1.000 1.000 1.000 NA 1.000
18 1.000 1.000 1.000 NA 0.544
19 1.000 1.000 1.000 NA 0.111
20 1.000 NA 1.000 NA 1.000
Code : Tout sélectionner
matpix=matrix(c(1,1,1,1,1,0.245,0.154,1,1,0.255,0.265,1,1,
0.544,0.111,1,1,1,1,1),nrow=5,ncol=4)
matpix2=as.vector(matpix)
matpix2=as.data.frame(matpix2)
output <- matrix(NA, 5, 20)
for (i in 1:20) {
output[, i]<-c(i,i+1,i-1,i+4,i-4)
}
colnames(output)=c(1:20)
tab=t(output)
data=cbind(matpix2,tab)
colnames(data)=c("couleur","i","i+1","i-1","i+4","i-4")
a=data$i
b=data$`i+1`
c=data$`i-1`
c[which(c == 0)] <- NA
d=data$`i+4`
e=data$`i-4`
e[which(e <= 0)] <- NA
data$pixplus1=data[data$i[b],1]
data$pixmoins1=data[data$i[c],1]
data$pixplus4=data[data$i[d],1]
data$pixmoins4=data[data$i[e],1]
data=data[,c(1,7:10)]
pixel_group <- function(x) {
g <- integer(length(x)) # group of each pixel
g0 <- 0 # current group number
for (i in seq.int(g)) {
if (x[i] == 1.0 || i == 1L) {
## pix = noir or in first pixel, keep group at 0
g[i] <- 0
} else if (x[i-1] != 1.0 || i <= 4L) {
## pix = vert and last pixel also green, keep current group
## also keep current group if last pixel not green, but at the beginning
g[i] <- g0
} else if (x[i-4] == 1.0) {
## pix = vert, pix-1 = noir, pix-4 = noir: create new group and update g
g[i] <- g0 <- g0 + 1
} else {
## pix = vert, pix-1 = noir, pix-4 = vert: same group as pix-4
g[i] <- g[i-4]
}
}
return(g)
}
(data$group <- pixel_group(data$couleur))
#> [1] 0 0 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0 0
Code : Tout sélectionner
pixel_group2 <- function(x) {
g <- integer(length(x))
g0 <- 0
for (i in seq.int(g)) {
g[i] <-
if (x[i] == 1 || i == 1L) {
0
} else if (x[i - 1] != 1 || i <= 4L) {
g0
} else if (x[i - 4] == 1) {
g0 <- g0 + 1
} else {
g[i - 4]
}
}
g
}
Code : Tout sélectionner
x <- c(1, 1, 1, 1, 1, 0.245, 0.154, 1, 1, 0.255, 0.265, 1, 1, 0.544, 0.111, 1, 1, 1, 1, 1)
set.seed(20200924)
bm <- bench::mark(pixel_group(x), pixel_group2(x))
bm
#> # A tibble: 2 x 6
#> expression min median `itr/sec` mem_alloc `gc/sec`
#> <bch:expr> <bch:tm> <bch:tm> <dbl> <bch:byt> <dbl>
#> 1 pixel_group(x) 5.08µs 5.69µs 166812. 4.36MB 0
#> 2 pixel_group2(x) 5.2µs 5.84µs 167208. 91.77KB 16.7
plot(bm)
#> Loading required namespace: tidyr
Retourner vers « Questions en cours »
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité