我以0.1的增量循环遍历1到1.9的序列,以在我的数据中找到这些有价值的位置(datapositions1)。然而,当循环时,值“1.7”虽然在数据中肯定没有被捕获。但是,如果我使用(1,1.7,by = 0.1)的序列,那么它会选择“1.7”&如果我使用(1.1,1.9,by = 0.1)的序列,那么它既不会拾取“1.7”也不会“1.8”。
我的数据的信息:
name position value
Name A 1.8 458.77011494
Name A 3.3 352.10734463
Name A 1.7 167.26923077
Name A 1.5 14.19756839
Name A 3.0 96.47292419
Name A 1.9 636.25490196
Name A 1.7 1.81479312
Name A 1.2 130.94444444
Name A 1.6 43.66501241
Name B 1.2 86.40421456
Name B 1.1 48.13294798
Name B 1.0 3.28143556
Name C 1.7 460.53846154
Name C 1.8 501.41545894
Name C 1.0 112.03095752
Name C 1.7 216.39130435
我正在使用的功能:
Average= function(){
df = data.frame()
for (i in seq(1, 1.9, 0.1)){
#print(i)
#b = datapositions1[c(datapositions1$position == 1.7),]
#print(b)
p = datapositions1[c(datapositions1$position == i),]
print(p)
df = rbind(df, data.frame(p))
}
df
}
Average()
同样在上面的代码中,我使用“b”时,它总是在使用“1.7”时返回正确的数据,而使用“i”的“p”则丢失“1.7”数据。
这是“p”输出“1.7”数据的输出。
497 Name A 1.6 60.997704
543 Name C 1.6 146.058824
544 Name C 1.6 163.133739
[1] 1.7
[1] name position value
<0 rows> (or 0-length row.names)
[1] 1.8
name position value
42 Name A 1.8 20.614468
43 Name B 1.8 49.724638
89 Name A 1.8 101.725367
任何建议请:)
答案 0 :(得分:2)
我想我现在有一个解决方案。
我在文档中读到了这个.. “第二种形式从,从+到......生成,直到小于或等于的序列值。指定 - 来自和相反的符号是一个错误。请注意,计算出的最终值可以超出允许舍入错误,但被截断为。('超越'是最多1e-10倍abs(从 - 到)。)“
我注意到这可能是一个舍入问题,而seq代码可能会执行以下操作:
a+=0.1
> 0.1
a+=0.1
> 0.2000000002
意思是“i”永远不会等于表中所代表的内容。 因此使用:
i = as.character(i)
似乎解决了这个问题!