Я пытаюсь определить нормальность значений в строках фрейма данных. В идеале я хочу рассчитывать тест Шапиро-Уилка для каждой строки (столько тестов, сколько строк находится во фрейме данных).
Реальный набор данных большой, но для этой цели я использую пример.
dput(example)
structure(c(103L, 122L, 40L, 107L, 124L, 108L, 89L, 102L, 40L,
70L, 78L, 78L, 78L, 78L, 64L, 64L, 64L, 50L, 50L, 50L, 133L,
64L, 55L, 64L, 108L, 124L, 108L, 146L, 13L, 40L, 122L, 124L,
107L, 122L, 133L, 122L, 107L, 121L, 70L, 113L, NA, 108L, NA,
40L, 122L, 89L, 36L, 113L, 26L, 26L, NA, 103L, NA, 55L, 153L,
146L, 36L, NA, NA, 77L, NA, 133L, NA, 36L, 167L, 92L, 65L, NA,
NA, 40L, NA, 107L, NA, 89L, 146L, NA, 92L, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA), .Dim = 10:9, .Dimnames = list(
c("7", "10", "51", "62", "4", "5", "79", "16", "17", "243"
), c("centroid", "n_1", "n_2", "n_3", "n_4", "n_5", "n_6",
"n_7", "n_8")))
Как было сказано, я хотел бы проверить нормальность для каждой строки, и я предполагаю, что некоторые строки пройдут, а для других нормальность не будет рассчитана, потому что недостаточно значений или все они идентичны. На самом деле меня это очень интересует, поскольку я пытаюсь доказать, что это плохая идея. Я хотел бы, чтобы мои результаты были записаны в новый столбец, и если тест нормальности не может быть рассчитан, появится сообщение об ошибке (что-то ОШИБКА / ЛОЖЬ)
Я могу вычислить Шапиро для любой строки вот так:
shapiro.test(example[1,])
Shapiro-Wilk normality test
data: example[1, ]
W = 0.9631, p-value = 0.7984
И я должен иметь возможность вычислять Шапиро для каждой строки следующим образом (не работает):
> apply(example, example[1:10,], shapiro.test)
Error in d[-MARGIN] : only 0's may be mixed with negative subscripts
Я надеюсь, что кто-то может указать мне правильное направление. Спасибо!
shapiro.test(df[1,]) p-value = 0.7984
16.11.2020NA
, вы можете изменить строкуifelse(sum(is.na(x)) > n_NAs, NA, shapiro.test(x)$statistic)
наifelse(sum(is.na(x)) > n_NAs, "ERROR", shapiro.test(x)$statistic)
, и вы получите ERROR вместо NA. 16.11.2020