我的数据集如下,
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,我尝试了正则表达式,但没有成功。
答案 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