Dear R-Help, I try to change a specific value here by following these: https://www.journaldev.com/39695/replace-in-r https://stackoverflow.com/questions/5824173/replace-a-value-in-a-data-frame-based-on-a-conditional-if-statement https://stackoverflow.com/questions/54615462/how-to-replace-certain-values-in-a-specific-rows-and-columns-with-na-in-r ..and many more however, it is not change anything. I believe it "should" be easy but I think I am missing something. I am afraid it is my system that has a problem but restarting r is not solve the problem. I just want to change 20 to 0 in my data.> dput(a)c(20, 20, 14.2375646029948, 19.9999999999999, 20, 20, 16.3092078677214, 20, 20, 20, 20, 20, 20, 20, 20, 14.8590932408795, 16.178935255298, 20, 20, 20, 20, 27.6404077886079, 20, 20, 20, 20, 20, 21.9857063037444, 20, 20, 20, 20) what I did: a[a==20]<-0 #fail a<-replace(a,a==20,0) #fail a[which(a==20)]<-0 #fail> sessionInfo()R version 4.1.2 (2021-11-01) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 10 x64 (build 19043) Matrix products: default locale: [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 [3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C [5] LC_TIME=English_United States.1252 system code page: 949 Best, Ani
Hi Ani, It seems to work for me: a<-c(20, 20, 14.2375646029948, 19.9999999999999, 20, 20, 16.3092078677214, 20, 20, 20, 20, 20, 20, 20, 20, 14.8590932408795, 16.178935255298, 20, 20, 20, 20, 27.6404077886079, 20, 20, 20, 20, 20, 21.9857063037444, 20, 20, 20, 20)> a==20[1] TRUE TRUE FALSE FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE [13] TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE FALSE TRUE TRUE [25] TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE> a[a==20]<-0 > a[1] 0.00000 0.00000 14.23756 20.00000 0.00000 0.00000 16.30921 0.00000 [9] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 14.85909 [17] 16.17894 0.00000 0.00000 0.00000 0.00000 27.64041 0.00000 0.00000 [25] 0.00000 0.00000 0.00000 21.98571 0.00000 0.00000 0.00000 0.00000 Notice that it didn't make 19.99999999999999 equal to 20, but did round it up when printing the result. How do you know that it failed? Jim On Wed, Apr 6, 2022 at 12:48 PM ani jaya <gaaauul at gmail.com> wrote:> > Dear R-Help, > > I try to change a specific value here by following these: > > https://www.journaldev.com/39695/replace-in-r > https://stackoverflow.com/questions/5824173/replace-a-value-in-a-data-frame-based-on-a-conditional-if-statement > https://stackoverflow.com/questions/54615462/how-to-replace-certain-values-in-a-specific-rows-and-columns-with-na-in-r > ..and many more > > however, it is not change anything. I believe it "should" be easy but > I think I am missing something. I am afraid it is my system that has a > problem but restarting r is not solve the problem. > I just want to change 20 to 0 in my data. > > > dput(a) > c(20, 20, 14.2375646029948, 19.9999999999999, 20, 20, 16.3092078677214, > 20, 20, 20, 20, 20, 20, 20, 20, 14.8590932408795, 16.178935255298, > 20, 20, 20, 20, 27.6404077886079, 20, 20, 20, 20, 20, 21.9857063037444, > 20, 20, 20, 20) > > what I did: > a[a==20]<-0 #fail > a<-replace(a,a==20,0) #fail > a[which(a==20)]<-0 #fail > > > sessionInfo() > R version 4.1.2 (2021-11-01) > Platform: x86_64-w64-mingw32/x64 (64-bit) > Running under: Windows 10 x64 (build 19043) > > Matrix products: default > > locale: > [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 > [3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C > [5] LC_TIME=English_United States.1252 > system code page: 949 > > Best, > Ani > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
The confusion comes from dput() not distinguishing between numbers that are quite close to each other. E.g.,> x <- 20 - (0:12)*.Machine$double.eps > x == 20[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE> diff(x)[1] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 [7] 0.000000e+00 0.000000e+00 -3.552714e-15 0.000000e+00 0.000000e+00 0.000000e+00> > dput(x)c(20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20) You have to use dput's control="digits17" or "exact" to avoid this rounding:> dput(x, control="digits17")c(20, 20, 20, 20, 20, 20, 20, 20, 20, 19.999999999999996, 19.999999999999996, 19.999999999999996, 19.999999999999996)> dput(x, control="exact")c(0x1.4p+4, 0x1.4p+4, 0x1.4p+4, 0x1.4p+4, 0x1.4p+4, 0x1.4p+4, 0x1.4p+4, 0x1.4p+4, 0x1.4p+4, 0x1.3ffffffffffffp+4, 0x1.3ffffffffffffp+4, 0x1.3ffffffffffffp+4, 0x1.3ffffffffffffp+4) The solution to your original problem is to specify a small range of values around 20 that you wish to change to zero. E.g., a[ abs(a-20) < 20*.Machine$double.eps ] <- 0 -Bill On Tue, Apr 5, 2022 at 7:48 PM ani jaya <gaaauul at gmail.com> wrote:> Dear R-Help, > > I try to change a specific value here by following these: > > https://www.journaldev.com/39695/replace-in-r > > https://stackoverflow.com/questions/5824173/replace-a-value-in-a-data-frame-based-on-a-conditional-if-statement > > https://stackoverflow.com/questions/54615462/how-to-replace-certain-values-in-a-specific-rows-and-columns-with-na-in-r > ..and many more > > however, it is not change anything. I believe it "should" be easy but > I think I am missing something. I am afraid it is my system that has a > problem but restarting r is not solve the problem. > I just want to change 20 to 0 in my data. > > > dput(a) > c(20, 20, 14.2375646029948, 19.9999999999999, 20, 20, 16.3092078677214, > 20, 20, 20, 20, 20, 20, 20, 20, 14.8590932408795, 16.178935255298, > 20, 20, 20, 20, 27.6404077886079, 20, 20, 20, 20, 20, 21.9857063037444, > 20, 20, 20, 20) > > what I did: > a[a==20]<-0 #fail > a<-replace(a,a==20,0) #fail > a[which(a==20)]<-0 #fail > > > sessionInfo() > R version 4.1.2 (2021-11-01) > Platform: x86_64-w64-mingw32/x64 (64-bit) > Running under: Windows 10 x64 (build 19043) > > Matrix products: default > > locale: > [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United > States.1252 > [3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C > [5] LC_TIME=English_United States.1252 > system code page: 949 > > Best, > Ani > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]