Сохранять только десятичные числа во фрейме данных - PullRequest
0 голосов
/ 05 мая 2018

У меня есть набор данных, как показано ниже,

1234     123.45    123.98    569.00
569.78   234.98    2347.1    898.11
689      598.1     569       781

Можно ли сохранить только десятичные дроби из набора:

123.45  123.98
569.78  234.98   2347.1   898.11
598.1

с R, я попробовал регулярное выражение, но безуспешно.

Ответы [ 3 ]

0 голосов
/ 05 мая 2018

Если это фрейм данных, мы можем использовать lapply и заменить значения, соответствующие регулярному выражению, пустым пробелом.

df[] <- lapply(df, function(x) replace(x, !grepl("\\.", x), ""))

df
#      V1     V2     V3     V4
#1        123.45 123.98       
#2 569.78 234.98 2347.1 898.11
#3         598.1              

Если это вектор, подход регулярного выражения может использовать grep и соответствовать точному "." в нем.

grep("\\.", x, value= T) 
#[1] "123.45" "123.98" "569.78" "234.98" "2347.1" "898.11" "598.1" 

Это преобразовало бы числа в символы, мы можем преобразовать их в числовые значения as.numeric

as.numeric(grep("\\.", x,value= T))
#[1]  123.45  123.98  569.78  234.98 2347.10  898.11  598.10

данные

df <- read.table(text = "1234     123.45    123.98    569.00
                         569.78   234.98    2347.1    898.11
                         689      598.1     569       781")

x <-c(1234, 123.45, 123.98, 569.00, 569.78, 234.98, 2347.1, 898.11, 689, 598.1, 569, 781)
0 голосов
/ 05 мая 2018

Мы также можем преобразовать в integer и проверить с исходными данными

tt[as.integer(tt) != tt]
#[1]  123.45  123.98  569.78  234.98 2347.10  898.11  598.10
0 голосов
/ 05 мая 2018

Я думаю, вы можете использовать это:

tt <- c(1234, 123.45, 123.98, 569.00, 569.78, 234.98, 2347.1, 898.11, 689, 598.1, 569, 781)
tt[!(tt %% 1 == 0)]

123.45  123.98  569.78  234.98 2347.10  898.11  598.10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...