[R] How to modify rows matching patter on multiple columns of dataframe?

Luigi Marongiu m@rong|u@|u|g| @end|ng |rom gm@||@com
Thu Aug 12 14:37:32 CEST 2021


Helo
I have a dataframe whose names are similar and I would like to change
the rows containing given values simultaneously.
I can select the columns using library(dplyr) but I can't modify the data:
```
library(dplyr)
> df <- data.frame(var1 = c(letters[1:3], letters[1:4]),
+                 var2 = c(LETTERS[1:7]),
+                 var3 = c(letters[1:3], letters[1:4]),
+                 var4 = (1:7)^2,
+                 var5 = c("light", "light", "heavy", "heavy", "heavy",
+                          "light", "heavy"),
+                 stringsAsFactors = FALSE); df
  var1 var2 var3 var4  var5
1    a    A    a    1 light
2    b    B    b    4 light
3    c    C    c    9 heavy
4    a    D    a   16 heavy
5    b    E    b   25 heavy
6    c    F    c   36 light
7    d    G    d   49 heavy
> select(df, matches("var[123]"))
  var1 var2 var3
1    a    A    a
2    b    B    b
3    c    C    c
4    a    D    a
5    b    E    b
6    c    F    c
7    d    G    d
> df[[select(df, matches("var[123]")) == "a"]] <- "z"
Error in `[[<-`(`*tmp*`, i, value = value) :
  recursive indexing failed at level 2
> df[[select(df, contains("var1")) == "a"]] <- "z"
Error in `[[<-`(`*tmp*`, i, value = value) :
  recursive indexing failed at level 2
```
If I sue which, I get a wrong substitution :
```
> df[which(select(df, matches("var[123]")) == "a"), ] <- "z"; df
   var1 var2 var3 var4  var5
1     z    z    z    z     z
2     b    B    b    4 light
3     c    C    c    9 heavy
4     z    z    z    z     z
5     b    E    b   25 heavy
6     c    F    c   36 light
7     d    G    d   49 heavy
8  <NA> <NA> <NA> <NA>  <NA>
9  <NA> <NA> <NA> <NA>  <NA>
10 <NA> <NA> <NA> <NA>  <NA>
11 <NA> <NA> <NA> <NA>  <NA>
12 <NA> <NA> <NA> <NA>  <NA>
13 <NA> <NA> <NA> <NA>  <NA>
14 <NA> <NA> <NA> <NA>  <NA>
15    z    z    z    z     z
16 <NA> <NA> <NA> <NA>  <NA>
17 <NA> <NA> <NA> <NA>  <NA>
18    z    z    z    z     z
```

what is the correct syntax?
Thank you

-- 
Best regards,
Luigi



More information about the R-help mailing list