Próbuję osiągnąć coś podobnego do this question, ale z wieloma wartościami, które muszą zostać zastąpione przez NA, oraz w dużym zbiorze danych.R: Zamień wiele wartości w wielu kolumnach ramek danych na NA
df <- data.frame(name = rep(letters[1:3], each = 3), foo=rep(1:9),var1 = rep(1:9), var2 = rep(3:5, each = 3))
który generuje ten dataframe:
df
name foo var1 var2
1 a 1 1 3
2 a 2 2 3
3 a 3 3 3
4 b 4 4 4
5 b 5 5 4
6 b 6 6 4
7 c 7 7 5
8 c 8 8 5
9 c 9 9 5
chciałbym zastąpić wszystkie wystąpienia, powiedzmy, 3 i 4 przez NA, ale tylko w kolumnach, które zaczynają się od "var".
wiem, że mogę użyć kombinacji []
operatorów, aby osiągnąć wynik chcę:
df[,grep("^var[:alnum:]?",colnames(df))][
df[,grep("^var[:alnum:]?",colnames(df))] == 3 |
df[,grep("^var[:alnum:]?",colnames(df))] == 4
] <- NA
df
name foo var1 var2
1 a 1 1 NA
2 a 2 2 NA
3 a 3 NA NA
4 b 4 NA NA
5 b 5 5 NA
6 b 6 6 NA
7 c 7 7 5
8 c 8 8 5
9 c 9 9 5
Teraz moje pytania są następujące:
- Czy istnieje sposób, aby zrobić to w efektywny sposób, biorąc pod uwagę, że mój aktualny zbiór danych ma około 100 000 linii, a 400 z 500 zmiennych rozpoczyna z "var". Wydaje się (subiektywnie) spowalniać na moim komputerze, gdy używam techniki podwójnego nawiasu.
- Jak podejść do problemu, jeśli zamiast 2 wartości (3 i 4) zostaną zastąpione przez NA, miałem długą listę, powiedzmy, 100 różnych wartości? Czy istnieje sposób na określenie wielu wartości przy konieczności wykonywania niezdarnej serii warunków oddzielonych przez operatora?
Można użyć ''% w%. – Roland