R中列表的布尔条件不是将原始值重新分配给正确的值

时间:2018-04-04 02:12:43

标签: r

这可能是我的逻辑中的错误,也可能是我不熟悉的“R方式”......我环顾四周但却找不到任何具体的指导。

我在列表中有300个值,范围从0.4到1(含)。

如果某个值大于或等于0.100000000,那么我想将该值转换为0.如果值不大于或等于0.100000,则该值应为1。

这是作为本文(Logic not working in filtering a list of values based on a threshold in R)中的建议答案给出的以下逻辑。

  

这个问题并非重复,因为此处提出的建议   帖子没有解决我的问题,我现在有一个不同的问题   只转换十进制数字。

  index <- predicted_train >= 0.100000000
  predicted_train_0_1 <- predicted_train
  predicted_train_0_1[index] <- 0      
  predicted_train_0_1[!index] <- 1

如果predict_train中的值为1,则完美,但如果值为小数(0.444或0.99999)则完全错误。这是预测模型的一部分。当然,如果原始列表中的值是十进制数而不是整数,则我的预测会失败。

这是输出输出:

structure(c(0.00000000000887978249471495, 0.000000000102099666845067, 
0.999999999999994, 0.999999999994037, 0.999999999999902, 0.000000000456186801047934, 
0.000000276161153341468, 0.000000000152031909524259, 0.999999999999994, 
0.00341047330505499, 1, 0.0000179771008441045, 1, 0.999999999999999, 
1, 0.0000000510218964957691, 0.103743763293409, 1, 0.999999999846489, 
0.0000000000464043846752508, 0.000220612854089335, 0.0000000840458932539115, 
0.000111013075286084, 0.0000000000210686963713955, 0.000000000148986761281177, 
0.000000000746016702213319, 0.000201142836555311, 0.000000155811495478402, 
0.000000242817287729542, 0.000166576680354779, 0.99999999999998, 
0.000000000167007066190115, 0.00000000133793400573132, 0.000000000195006957555248, 
0.000202587575150869, 0.00000000000713476489269155, 0.00000000650740716038626, 
0.999999999958627, 0.999999972669627, 1, 0.00000000275149563085147, 
0.000146264551870513, 0.00000034266694046288, 0.000000012132408191839, 
1, 0.999999999905262, 0.9999999140199, 1, 1, 1, 0.999999999955009, 
1, 1, 0.00000140021466033136, 0.999999969966525, 0.999999997768666, 
0.0000000000824228162780307, 0.000000000211840087957173, 1, 1, 
0.999999999999988, 1)

我试过的方法

我试图删除索引变量的条件等于in。我也在我的主要逻辑之外尝试过它以隔离问题。

任何帮助都非常受欢迎。

2 个答案:

答案 0 :(得分:1)

也许是ifelse?

my.df$newvalue <- ifelse(my.df$oldvalue>=.1,0,1)

如果有意义,则覆盖旧值

答案 1 :(得分:0)

我们可以做到将逻辑向量转换为二进制

my.df$newvalue <- as.integer(my.df$oldvalue < .1)