'double'类型的数据的子范围

问题描述 投票:0回答:2

问题已在注释中解决!

我有一个9个元素(Spec_opt)的列表(称为“ S3 Spectra”)。这些元素中的两个(“ data”和“ freq”)的数据类型为'double'(请参见所附的屏幕转储)。

呼叫Spec_opt$freq[1:5]看起来像这样:

> Spec_opt$freq[1:5]
[1] 19.65228 19.65205 19.65183 19.65160 19.65137

我需要对这些值的范围进行子集化,并且我已经尝试过:

Spec_opt$freq <- Spec_opt$freq %>% filter(Spec_opt$freq %in% (-0.5:9.5))

但是出现此错误:

Error in UseMethod("filter_") : 
  no applicable method for 'filter_' applied to an object of class "c('double', 'numeric')"

此:

Spec_opt$freq <- Spec_opt$freq[which(Spec_opt$freq >= -.5 | Spec_opt$freq <= 9.5)]

不做任何事情。

从其他帖子中我了解到这是数据类型('double')的问题。

执行此操作:Spec_opt$freq <- lapply(Spec_opt$freq, as.numeric)

Spec_opt$freq转换为列表,其中每个元素仍为'double'类型]

现在调用Spec_opt $ freq [1:5]看起来像这样:

Spec_opt$freq[1:10]
[[1]]
[1] 19.65228

[[2]]
[1] 19.65205

[[3]]
[1] 19.65183

[[4]]
[1] 19.6516

[[5]]
[1] 19.65137

有人可以帮助我,将'double'转换为“普通” values还是帮助我以这种格式对数据进行子集化?

[对不起,我不知道如何提供数据,如果我调用dput(Spec_opt$freq[1:50])提供一个子集(总共n = 130,000个值),它只是给出一个数字列表,其中问题没有得到解决一直在说...

> dput(Spec_opt$freq[1:5])
c(19.6522802209025, 19.6520531555891, 19.6518260902757, 19.6515990249622, 
19.6513719596488)

整个Spec_opt对象很大,并且dput(Spec_opt)无法在我的“窗口”中打印。让我知道是否可以使这个示例更好?

enter image description here

问题已在注释中解决!我有9个元素(S3光谱)的列表(称为“ Spec_opt”)。其中两个元素(“ data”和“ freq”)的数据类型为“ double”(请参见随附的屏幕转储)。 ...

r double subset
2个回答
0
投票

编辑:


0
投票

处理某些错误的一种方法是将列表转换为数据框,然后应用过滤器:

© www.soinside.com 2019 - 2024. All rights reserved.