Использование trunc с ifelse дает другое поведение, чем использование только trunc - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь изменить столбец в кадре данных так, чтобы числа <10 были округлены до одного десятичного знака. Числа> = 10 должны быть усечены, все после десятичной дроби отброшено.

Вот код:

df <- tibble (
  x = c(1.2, 3.4, 6.7, 11.44, 15.9)
)

test_trunc_ifelse <- ifelse(df$x < 10, round(df$x, digits = 1), trunc(df$x))

test_trunc <- trunc(df$x)

и некоторые результаты:

test_trunc_ifelse
[1]  1.2  3.4  6.7 11.0 15.0

test_trunc
[1]  1  3  6 11 15

Я думал (и хочу) ifelse вывести это:

[1]  1.2  3.4  6.7 11 15

Почему он этого не делает? И как мне получить этот вывод?

1 Ответ

0 голосов
/ 03 января 2019

Вам нужны два класса numeric и integer, и невозможно иметь два класса в одном векторе.

Если вы все еще хотите получить ожидаемый результат, один хак должен преобразовать его в символ

test <- as.character(ifelse(df$x < 10, round(df$x, digits = 1), trunc(df$x)))
test
#[1] "1.2" "3.4" "6.7" "11"  "15" 

Но вы не можете выполнить какие-либо математические вычисления с этим.Для этого вам нужно снова преобразовать его в числовое или целое число.

as.numeric(test)
#[1]  1.2  3.4  6.7 11.0 15.0
as.integer(test)
#[1]  1  3  6 11 15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...