Удалите все числа перед десятичным знаком в столбце чисел, используя R - PullRequest
0 голосов
/ 06 июня 2018

У меня есть датафрейм, где один из столбцов выглядит следующим образом:

Minutes
1.432
12.345
4.556
1.324
0.657
6.558

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

Minutes
0.432
0.345
0.556
0.324
0.657
0.558

Есть ли способ сделать это в коде R?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Комментарий от brittenb довольно хороший, просто используйте по модулю

R> test_df <- data.frame(Minutes =   c(1.432, 12.345, 4.556, 1.324, 
0.657, 6.558)
R> test_df$Minutes_modulo <- test_df$Minutes %% 1
R> test_df
  Minutes Minutes_modulo
1   1.432          0.432
2  12.345          0.345
3   4.556          0.556
4   1.324          0.324
5   0.657          0.657
6   6.558          0.558

Из документации:

%% указывает x mod y и% /% обозначает целочисленное деление.Гарантируется, что x == (x %% y) + y * (x% /% y) (с точностью до ошибки округления), если только y == 0, где результатом %% является NA_integer_ или NaN (в зависимости от typeof ofаргументы) и для не конечных аргументов.

0 голосов
/ 06 июня 2018

Мы можем вычесть из целочисленной версии

with(df1, Minutes - as.integer(Minutes))
#[1] 0.432 0.345 0.556 0.324 0.657 0.558

Контрольные показатели

library(microbenchmark)
v1 <- rep(df1$Minutes, 1e6)
microbenchmark(akrun = v1 - as.integer(v1), brittenb = v1 %%1, unit = 'relative')
#Unit: relative
#     expr      min       lq     mean   median       uq      max neval
#     akrun 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000   100
#  brittenb 1.386245 1.392605 1.290523 1.317515 1.232846 1.437915   100

данные

df1 <-  data.frame(Minutes =   c(1.432, 12.345, 4.556, 1.324, 0.657, 6.558))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...