仅保留数据框中的十进制数

时间:2018-05-05 11:22:26

标签: r

我的数据集如下,

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 :(得分:2)

我认为你可以使用它:

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

答案 1 :(得分:0)

如果是数据框,我们可以使用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并匹配精确的&#34;。&#34;在它。

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)

答案 2 :(得分:0)

我们还可以转换为integer并检查原始数据

tt[as.integer(tt) != tt]
#[1]  123.45  123.98  569.78  234.98 2347.10  898.11  598.10