我使用fread
包中的data.table
读取数据框的一列。向量中大约一半的数字具有双精度,而另一半只有整数精度。
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)
答案 0 :(得分:4)
假设你的向量是x,你可以将舍入的值与原始值相同,即
。.join()
答案 1 :(得分:2)
为了区分1.0和1,我有了一个想法(虽然可能不那么有才):使用正则表达式将它们分开。
single <- data$value[!grepl("\\.", data$value)]
double <- data$value[grepl("\\.", data$value)]
在这种情况下,data$value
首先被强制转换为grepl
中的字符,然后按字母方式搜索字面点,为子集data$value
生成逻辑值。
答案 2 :(得分:1)
尝试这样的事情:
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