[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