Cześć wszystkim, czego potrzebuję trochę pomocy z problemem, z którymi stoję, na czym jestem pewien, że jestem dość prosty, ale nie mogę wydawać się w stanie go rozwiązać sam. Zasadniczo jest to mój zestaw danych:

Age Gender Group  V1 V2 V3 V4 V5
20     1     1       2   1     4
21     2     1    2      2     1
35     2     2    2         1
22           2    1         2 

Widzę, że wiele sugeruje funkcję podzbioru / wyboru do przeprowadzenia analizy z określonymi zmiennymi, ale czego potrzebuję, jest pracować z V1 do V5, aby zrozumieć, ile wierszy do usuwania przyczyny brakujących danych, ale bez utraty informacji wiekowych, płci i grupy. Więc w zasadzie potrzebuję, aby usunąć r, aby usunąć cały wiersz, który z V1 do V5 mają więcej niż 3 brakujące dane (które wiem, jak to zrobić) i daj mi powrót ramki danych ze wszystkimi informacjami pozostałych danych (to właśnie ja "Missing). Coś takiego:

Age Gender Group  V1 V2 V3 V4 V5
20     1     1       2   1     4
21     2     1    2      2     1

Nie wiem, czy uda mi się wyjaśnić moje samodzielne, ale z góry dziękuję

0
Carlo Marrone 23 marzec 2020, 08:03

1 odpowiedź

Najlepsza odpowiedź

Możemy użyć rowSums na wybranych kolumnach. (Kolumny, które zaczynają się od "V" i numeru).

cols <- grep('^V\\d+', names(df))

Jeśli masz wartości NA jako brakujące dane

df[rowSums(is.na(df[cols])) < 3, ]

#  Age Gender Group V1 V2 V3 V4 V5
#1  20      1     1 NA  2  1 NA  4
#2  21      2     1  2 NA  2 NA  1

Jeśli puste komórki jako brakujące dane.

df[rowSums(df[cols] == '') < 3, ]

Inna opcja z wierszem mądrym apply

df[apply(is.na(df[cols]), 1, sum) < 3, ]

dane

df <- structure(list(Age = c(20L, 21L, 35L, 22L), Gender = c(1L, 2L, 
2L, NA), Group = c(1L, 1L, 2L, 2L), V1 = c(NA, 2L, 2L, 1L), V2 = c(2L, 
NA, NA, NA), V3 = c(1L, 2L, NA, NA), V4 = c(NA, NA, 1L, 2L), 
V5 = c(4L, 1L, NA, NA)), class = "data.frame", row.names = c(NA, -4L))
0
Ronak Shah 23 marzec 2020, 05:13