我使用data.table
包中的fread
函数从数据框中读取了一列。向量中约有一半的数字具有双精度,而另一半只具有整数精度。
head(data$value)
#[1] 3 1.2 3.1 1 1.0 5
我希望将向量按精度分为两部分,但是当我使用
typeof
函数时,所有值都以 double 的形式返回,所以我无法使用该函数来区分这两个部分。输出将会得到两个单独的向量,如下所示:
single <- c(3,1,5)
double <- c(1.2,3.1,1.0)
我使用data.table
包中的fread
函数从数据框中读取了一列。向量中约有一半的数字具有双精度,而另一半只具有整数精度。
head(data$value)
#[1] 3 1.2 3.1 1 1.0 5
typeof
函数时,所有值都以 double 的形式返回,所以我无法使用该函数来区分这两个部分。single <- c(3,1,5)
double <- c(1.2,3.1,1.0)
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
single <- data$value[!grepl("\\.", data$value)]
double <- data$value[grepl("\\.", data$value)]
data$value
首先在grepl
中被强制转换为字符,然后逐个搜索字面点,生成逻辑值以对data$value
进行子集筛选。fread("file.csv", colClasses = c(value = "character"))
直接将值作为字符读取。 - Scarabeex <- c(3, 1.2, 3.1, 1, 1.0, 5)
。 - Sotos
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
1
而有些是1.0
?我是否遗漏了什么?请提供一个可重现的例子(dput(head(data$value))
)。 - Sotosdata$value
时,有些数字显示为整数格式,而其他数字显示为浮点格式,因为 R 通常会使用相同格式打印所有数字。请注意不要添加额外的解释或信息。 - digEmAllfread
和colClasses
参数将它们读取为字符,然后使用@ytu的方法。 - Scarabee