Jak naprawić w r: brakujące wartości nie są dozwolone w przypisaniach z indeksem dolnym


Komunikat o błędzie, który możesz napotkać podczas korzystania z R, to:

 Error in `[<-.data.frame`(`*tmp*`, df$A == 5, , value = list(A = c(NA, : 
  missing values are not allowed in subscripted assignments of data frames

Ten błąd zwykle występuje, gdy próbujesz przypisać wartości w jednej kolumnie przy użyciu wartości z innej kolumny, ale obecne są wartości NA .

Poniższy przykład pokazuje, jak w praktyce rozwiązać ten błąd.

Jak odtworzyć błąd

Załóżmy, że tworzymy następującą ramkę danych w R:

 #create data frame
df <- data. frame (A=c(3, 4, 4, NA, 5, 8, 5, 9),
                 B=c(12, 13, 7, 7, 12, 11, 15, 7))

#view data frame
df

   AB
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 12
6 8 11
7 5 15
8 9 7

Załóżmy teraz, że próbujemy przypisać wartość 10 do każdego wiersza w kolumnie B, gdzie odpowiadająca wartość w kolumnie A wynosi 5:

 #attempt to assign column B a value of 10 where A is equal to 5
df[df$A == 5, ]$B <- 10

Error in `[<-.data.frame`(`*tmp*`, df$A == 5, , value = list(A = c(NA, : 
  missing values are not allowed in subscripted assignments of data frames

Otrzymujemy błąd, ponieważ w kolumnie A znajdują się wartości NA, a komunikat o błędzie wyraźnie mówi nam, że brakujące wartości nie są dozwolone w przypisaniach ramek danych z indeksem dolnym .

Jak uniknąć błędu

Istnieją dwa sposoby uniknięcia tego błędu.

1. Użyj operatora %in%

Jednym ze sposobów uniknięcia tego błędu jest użycie operatora %in% podczas wykonywania przypisania:

 #assign column B a value of 10 where A is equal to 5
df[df$A %in% 5,]$B <- 10

#view updated data frame
df

   AB
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 10
6 8 11
7 5 10
8 9 7

Należy zauważyć, że każdemu wierszowi w kolumnie B przypisano wartość 10, podczas gdy odpowiadająca wartość w kolumnie A wynosi 5 i nie otrzymaliśmy żadnych błędów.

2. Użyj is.na()

Innym sposobem uniknięcia tego błędu jest użycie funkcji is.na() podczas wykonywania przypisania:

 #assign column B a value of 10 where A is equal to 5
df[!is. na (df$A) & df$A == 5, ]$B <- 10

#view updated data frame
df

   AB
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 10
6 8 11
7 5 10
8 9 7

Ponownie możemy przypisać wartość 10 do każdego wiersza w kolumnie B, gdzie odpowiadająca wartość w kolumnie A wynosi 5 i nie otrzymamy żadnych błędów.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak naprawić inne typowe błędy w R:

Jak naprawić w R: argumenty obejmują różną liczbę linii
Jak naprawić w R: błąd w wyborze nieużywanych argumentów
Jak naprawić w R: wymiana ma zerową długość

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *