r语言 - 如何在向量中分隔整数和双精度



我使用data.table包中的fread读取数据框的一列。向量中大约一半的数字具有双精度,而另一半只有整数精度。

head(data$value)
#[1] 3 1.2 3.1 1 1.0 5

我想通过精度将向量分成两部分,但是当我使用 typeof 函数时,所有值都以双精度返回,所以我不能用它来区分两者。

输出将产生两个单独的向量,例如:

single <- c(3,1,5)
double <- c(1.2,3.1,1.0)

假设您的向量是 x,您可以拆分四舍五入时与原始值相同的值,即

x <- c(3, 1.2, 3.1, 1, 1.0, 5)
split(x, round(x) == x)
$`FALSE`
[1] 1.2 3.1
$`TRUE`
[1] 3 1 1 5

为了区分 1.0 和 1,我有一个想法(虽然可能不是那么有天赋(:使用正则表达式将它们分开。

single <- data$value[!grepl("\.", data$value)]
double <- data$value[grepl("\.", data$value)]

在这种情况下,data$value首先被强制转换为grepl中的字符,然后逐个搜索文字点,生成子集data$value的逻辑值。

尝试这样的事情:

single<-data[grepl("[.]",data$value),"value"]
double<-data[!grepl("[.]",data$value),"value"]
single
[1] 1.2 3.1 1.0
Levels: 1 1.0 1.2 3 3.1 5
> double
[1] 3 1 5
Levels: 1 1.0 1.2 3 3.1 5

最新更新