#r
#r
Вопрос:
Я новичок в R. У меня есть матрица, и я хочу знать, является ли каждое значение определенного столбца больше 0,05. Как мне это сделать? И почему вторая строка кода не работает? 9.65830710944783e-05 меньше 0,05, но логическое значение для этого равно True
> head(combine[,"rollingUSGG5Y_significance"], 30)
[1] NA NA NA NA
[5] NA NA NA NA
[9] NA "0.000340501400361469" NA NA
[13] NA NA "0.0180102687712968" NA
[17] NA NA NA "0.00392196741941212"
[21] NA NA NA NA
[25] "9.65830710944783e-05" NA NA NA
[29] NA "3.23767237214935e-07"
> head(combine[,"rollingUSGG5Y_significance"] > 0.05,30)
[1] NA NA NA NA NA NA NA NA NA FALSE NA NA NA NA FALSE NA NA NA
[19] NA FALSE NA NA NA NA TRUE NA NA NA NA TRUE
Комментарии:
1. сначала убедитесь, что они числовые:
head(as.numeric(combine[,"rollingUSGG5Y_significance"] )> 0.05,30)
2. Это работает. Спасибо!
Ответ №1:
Символьный столбец будет оцениваться TRUE
/ FALSE
иначе по сравнению с числовым столбцом при сравнении с числовым значением. Как отметил @Onyambu в комментариях, убедитесь, что вы оцениваете числа как числа.
Вот демонстрация того, как вы будете получать разные логические значения в каждом случае:
set.seed(123)
n <- 10
a <- c(rnorm(n), NA_integer_)
b <- c(as.character(rnorm(n)), NA_character_)
df <- data.frame(a, b, stringsAsFactors = FALSE)
df
a b
1 -0.56047565 1.22408179743946
2 -0.23017749 0.359813827057364
3 1.55870831 0.400771450594052
4 0.07050839 0.11068271594512
5 0.12928774 -0.555841134754075
6 1.71506499 1.78691313680308
7 0.46091621 0.497850478229239
8 -1.26506123 -1.96661715662964
9 -0.68685285 0.701355901563686
10 -0.44566197 -0.472791407727934
11 NA <NA>
Вы можете видеть это a
и b
иметь разные типы:
sapply(df, class)
a b
"numeric" "character"
И они будут оцениваться по-разному в сравнении с числовым сравнением:
df[, "a"] > .05
# FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE NA
df[, "b"] > .05
# TRUE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE FALSE NA
Добавлено объяснение от @Onyambu в комментариях:
Часто число неявно приводится к символу. например, 3==»3″ должно возвращать TRUE, а 3> «2.5» — TRUE, но 3e-1> «3» должно возвращать FALSE, но оно возвращает TRUE из-за символа, считываемого как 3e-1, а не как 0.3.
Комментарии:
1. Это хороший ответ!! Также, вероятно, вам следует добавить, что часто число неявно приводится к символу. например
3=="3"
, должно быть возвращено TRUE, а 3> «2.5» — TRUE, но 3e-1>»3″ должно возвращать FALSE, но оно возвращает TRUE из-за символа, считываемого как 3e-1, а не как 0.3.