这可能是我的逻辑中的错误,也可能是我不熟悉的“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。我也在我的主要逻辑之外尝试过它以隔离问题。
任何帮助都非常受欢迎。
答案 0 :(得分:1)
也许是ifelse?
my.df$newvalue <- ifelse(my.df$oldvalue>=.1,0,1)
如果有意义,则覆盖旧值
答案 1 :(得分:0)
我们可以做到将逻辑向量转换为二进制
my.df$newvalue <- as.integer(my.df$oldvalue < .1)