Как я могу применить сложные функции к каждому столбцу фрейма данных? - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь применить статистический тест почти к каждому столбцу моего data.frame, называемого «data». Я попытался написать al oop:

for (in names(data)[5:length(data)]) {
  norm = with(data, shapiro.test(y[group == "XY"]))
}

«группа» - это второй столбец фрейма данных, который разделяет данные на две группы. Я также пытался использовать apply:

apply(data[,5:length(data)],2,shapiro.test(group == "XY"))

Однако в обоих случаях я получаю следующую ошибку:

is.numeric(x) is not TRUE

Это также происходит, когда я использую имя столбца в кавычках, например в строке. вместо того, чтобы без них:

with(data,shapiro.test("columnname"[group == "XY"]))
with(data,shapiro.test(columnname[group == "XY"]))

Первая строка выдает ту же ошибку, но вторая работает просто отлично, однако, очевидно, только для одного столбца, и я хотел бы автоматически сделать это для нескольких столбцов.

Если у кого-то есть идеи, как решить эту проблему, это будет очень цениться:)

Меня спросили о выводе dput (), это:

> dput(data)
structure(list(code = c(NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN), group = structure(c(2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("XX", "XY"), class = "factor"), 
    no1 = c(NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN), no2 = c(NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN), no3 = c(NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN), dv1 = c(37L, 55L, 1L, 45L, 51L, 
    3L, 39L, 49L, 23L, 15L, 29L, 25L, 27L, 14L, 9L, 5L, 33L, 
    31L, 19L, 41L, 57L, 12L, 17L, 53L, 43L, 21L, 7L, 47L, 24L, 
    16L, 22L, 56L, 44L, 54L, 58L, 30L, 13L, 10L, 28L, 26L, 36L, 
    60L, 18L, 52L, 42L, 4L, 34L, 20L, 40L, 50L, 8L, 2L, 48L, 
    6L, 32L, 46L), dv2 = c(37L, 55L, 1L, 45L, 51L, 3L, 39L, 49L, 
    23L, 15L, 29L, 25L, 27L, 14L, 9L, 5L, 33L, 31L, 19L, 41L, 
    57L, 12L, 17L, 53L, 43L, 21L, 7L, 47L, 24L, 16L, 22L, 56L, 
    44L, 54L, 58L, 30L, 13L, 10L, 28L, 26L, 36L, 60L, 18L, 52L, 
    42L, 4L, 34L, 20L, 40L, 50L, 8L, 2L, 48L, 6L, 32L, 46L), 
    dv3 = c(0.78, 0.74, 0.85, 0.8, 0.88, 0.83, 0.77, 0.5, 0.78, 
    0.82, 0.81, 0.88, 0.88, 0.8, 0.84, 0.87, 0.76, 0.72, 0.44, 
    0.83, 0.85, 0.89, 0.84, 0.83, 0.75, 0.78, 0.88, 0.78, 0.9, 
    0.88, 0.79, 0.79, 0.92, 0.74, 0.74, 0.9, 0.67, 0.9, 0.9, 
    0.58, 0.28, 0.78, 0.9, 0.83, 0.67, 0.92, 0.82, 0.85, 0.68, 
    0.8, 0.91, 0.85, 0.87, 0.84, 0.83, 0.74), dv4 = c(71.41, 
    67.82, 35.49, 65.97, 76.74, 56.01, 64.48, 34.99, 69.97, 40.1, 
    78.39, 66.71, 54, 66.47, 60.65, 58.44, 74.64, 59.2, 74.47, 
    69.99, 74.54, 79.21, 86.51, 20.07, 27.39, 77.8, NA, 68.88, 
    58.22, 78.7, 61.92, 64.44, 59.46, 8.31, 68.35, 96.11, 25.75, 
    83.16, 67.97, 35.83, 53.41, 24.84, 87.48, 37.43, 37.43, 84.76, 
    8.55, 86.12, 45.74, 41.78, 71.92, 50.21, 70.08, 61.12, 77.52, 
    56.9)), row.names = c(NA, -56L), class = "data.frame")

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Опция с dplyr

library(dplyr)
data %>%
    summarise_at(6:9, ~ list(~ list(shapiro.test(.))))
0 голосов
/ 22 апреля 2020

Это то, что вы ищете?

lapply(data[,6:9], shapiro.test) # for any group value

или это?

lapply(data[data$group=="XY",6:9], shapiro.test) # for group=="XY"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...