#r
#r
Вопрос:
Я хочу выяснить, куда попадают оценки, сколько оценок у людей приходится на расстояние между шагами. Точно так же, как в excel Count_if в R, поэтому я пытаюсь использовать sum (), где данные следуют вниз…
test 1 75 2 65 3 51 4 28 5 88 6 55 7 98 8 18 9 58 10 26 11 10 12 50 13 32 14 10 15 47 16 100 17 75 18 74 19 64 20 100 21 30 22 50 23 83 24 93 25 68 26 77 27 30 28 100 29 5 30 98 31 28 32 85 33 56 34 66 35 100 36 20 37 66 38 64 39 88 40 22 41 63 42 98 43 43 44 60 45 47 46 58 47 29 48 71 49 91 50 36 51 16 52 13 53 88 54 0 55 90 56 46 57 78 58 78 59 86 60 31 61 29 62 40 63 28 64 90
Когда я пытаюсь определить, сколько людей получат 100 баллов в тесте, это работает, как и раньше…
sum(data$test == 100, na.rm = T) gt; sum(data$test == 100, na.rm = T) [1] 4
Но когда я пытаюсь вычислить тех, кто получает больше 90, но не 100, это происходит…
sum(data$test lt; 100 amp; data$test gt;= 90, na.rm = T) gt; sum(data$test lt; 100 amp; data$test gt;= 90, na.rm = T) [1] 0
Это кажется неискренним. Но когда я изменю код,
sum(data$test != 100 amp; data$test gt;= 90, na.rm = T) gt; sum(data$test != 100 amp; data$test gt;= 90, na.rm = T) [1] 7
Кто может объяснить мне причину, большое спасибо!
Комментарии:
1. Не мог размножаться. данные = данные.кадр(тест = образец(1:100, 100)) сумма(данные$тест lt; 100 и данные$тест gt;= 90, na.rm = T) #lt; 100 и данные$тест gt;gt; [1] 10 сумма(данные$тест != 100 и данные$тест lt; 100 и данные$тест gt;gt;gt;= 90, na.rm = T) #lt; 100 и данные$тест gt;gt;gt;gt; [1] 10 Это просто сработало
2. Это дает мне
4
,7
, и7
. Это работает на меня.
Ответ №1:
Я уверен, что ваша "test"
колонка-это характер, попробуйте принудить as.numeric
.
sum(data$test lt; 100 amp; data$test gt;= 90, na.rm=TRUE) # [1] 0 data$test lt;- as.numeric(data$test) ## coercion sum(data$test lt; 100 amp; data$test gt;= 90, na.rm=TRUE) # [1] 7
Причина , по которой он работает, ==
но не работает lt;
, gt;=
заключается в следующем:
sort(c(10, 9, 11, 100, 1000)) # [1] 9 10 11 100 1000 sort(as.character(c(10, 9, 11, 100, 1000))) # [1] "10" "100" "1000" "11" "9"
Символы отсортированы в алфавитном порядке, а цифры-по их значениям.
Данные
data lt;- structure(list(test = c("75", "65", "51", "28", "88", "55", "98", "18", "58", "26", "10", "50", "32", "10", "47", "100", "75", "74", "64", "100", "30", "50", "83", "93", "68", "77", "30", "100", "5", "98", "28", "85", "56", "66", "100", "20", "66", "64", "88", "22", "63", "98", "43", "60", "47", "58", "29", "71", "91", "36", "16", "13", "88", "0", "90", "46", "78", "78", "86", "31", "29", "40", "28", "90")), row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64"), class = "data.frame")
Ответ №2:
Другим способом кодирования было бы отфильтровать набор данных по критериям, а затем подсчитать количество оставшихся строк.
Предполагая, что ваши данные называются данными, а тест-это ваша переменная для фильтрации. Если вы хотите, чтобы мы точно диагностировали ваш вопрос, приведите воспроизводимый пример, используя dput(data)
и вставив его в свой вопрос, чтобы мы могли прочитать его в качестве отправной точки.
library(tidyverse) data %gt;% dplyr::filter(test gt;= 90, test lt; 100) %gt;% nrow()
Я использовал ваш код, и он сработал для меня. Я не знаю, почему это не для тебя.
data lt;- structure(list(test = c(0, 5, 10, 10, 13, 16, 18, 20, 22, 26, 28, 28, 28, 29, 29, 30, 30, 31, 32, 36, 40, 43, 46, 47, 47, 50, 50, 51, 55, 56, 58, 58, 60, 63, 64, 64, 65, 66, 66, 68, 71, 74, 75, 75, 77, 78, 78, 83, 85, 86, 88, 88, 88, 90, 90, 91, 93, 98, 98, 98, 100, 100, 100, 100)), class = "data.frame", row.names = c(NA, -64L)) sum(data$test lt; 100 amp; data$test gt;= 90, na.rm = T) [1] 7
Комментарии:
1. Это работает, спасибо, но мне любопытно, почему я не могу использовать sum(data$test lt; 100 amp; data$test gt;= 90, na.rm = T), чтобы найти его, это применимо в других случаях, например, lt; 100 amp; data$test gt;lt; 70 amp; gt;= 60, но только lt; 70 amp; gt;lt; 100 amp; gt;= 90.
2. Ладно, может быть, это проблема моего компьютера. Спасибо!