Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Substitute previous row value if value equal to 0 in R

Tags:

r

I want to check if the value of a column in a dataframe is equal to 0 and if it is 0, I want to substitute the previous row's value of that column.

Suppose my data is as follows,

               X
683           24.48
684           24.48
685           24.48
686           24.48
687           24.48
688           24.48
689           25.02
690           25.02
691           25.02
692           25.02
693           25.02
694           25.02
695           25.02
696           25.02
697           25.32
698           25.32
699           25.32
700            0.00
701            0.00
702            0.00
703            0.00
704            0.00
705            0.00
706            0.00
707            0.00
708            0.00
709            0.00
710            0.00
711            0.00
712            0.00
713            0.00
714            0.00
715            0.00
716            0.00
717            0.00
718            0.00
719            0.00
720            0.00
721            0.00
722            0.00
723            0.00
724            0.00
725            0.00
726            0.00
727            0.00
728            0.00
729            0.00
730            0.00
731            0.00
732            0.00
733            0.00
734            0.00
735            0.00
736            0.00
737            0.00
738            0.00
739            0.00
740            0.00
741            0.00
742            0.00
743            0.00
744            0.00
745            0.00
746            0.00
747            0.00
748            0.00
749            0.00
750            0.00
751            0.00
752            0.00
753            0.00
754            0.00
755            0.00
756            0.00
757            0.00
758            0.00
759            0.00
760            0.00
761            0.00
762            0.00
763            0.00
764            0.00
765            0.00
766            0.00
767            0.00
768            0.00
769            0.00
770            0.00
771            0.00
772            0.00
773            0.00
774            0.00
775            0.00
776            0.00
777            0.00
778            0.00
779            0.00
780            0.00
781            0.00
782            0.00
783            0.00
784            0.00
785            0.00
786            0.00
787            0.00
788            0.00
789            0.00
790            0.00
791            0.00
792            0.00
793            0.00
794            0.00
795            0.00
796            0.00
797            0.00
798            0.00
799            0.00
800            0.00
801            0.00
802            0.00
803            0.00
804            0.00
805            0.00
806            0.00
807            0.00
808            0.00
809            0.00
810            0.00
811            0.00
812            0.00
813            0.00
814            0.00
815            0.00
816            0.00
817            0.00
818            0.00
819            0.00
820            0.00
821            0.00
822            0.00
823            0.00
824            0.00
825            0.00
826            0.00
827            0.00
828            0.00
829            0.00
830            0.00
831            0.00
832            0.00
833            0.00
834            0.00
835            0.00
836            0.00
837            0.00
838            0.00
839            0.00
840            0.00
841            0.00
842            0.00
843            0.00
844            0.00
845            0.00
846            0.00
847            0.00
848            0.00
849            0.00
850            0.00
851            0.00
852            0.00
853            0.00
854            0.00
855            0.00
856            0.00
857            0.00
858            0.00
859            0.00
860            0.00
861            0.00
862            0.00
863            0.00
864            0.00
865            0.00
866            0.00
867            0.00
868            0.00
869            0.00
870            0.00
871            0.00
872            0.00
873            0.00
874            0.00
875            0.00
876            0.00
877            0.00
878            0.00
879            0.00
880            0.00
881            0.00
882            0.00
883            0.00
884            0.00
885            0.00
886            0.00
887            0.00
888            0.00
889            0.00
890            0.00
891            0.00
892            0.00
893            0.00
894            0.00
895            0.00
896            0.00
897            0.00
898            0.00
899            0.00
900            0.00
901            0.00
902            0.00
903            0.00
904            0.00
905            0.00
906            0.00
907            0.00
908            0.00
909            0.00
910            0.00
911            0.00
912            0.00
913            0.00
914            0.00
915            0.00
916            0.00
917            0.00
918            0.00
919            0.00
920            0.00
921            0.00
922            0.00
923            0.00
924            0.00
925            0.00
926            0.00
927            0.00
928            0.00
929            0.00
930            0.00
931            0.00
932            0.00
933            0.00
934            0.00
935            0.00
936            0.00
937            0.00
938            0.00
939            0.00
940            0.00
941            0.00
942            0.00
943            0.00
944            0.00
945            0.00
946            0.00
947            0.00
948            0.00
949            0.00
950            0.00
951            0.00
952            0.00
953            0.00
954            0.00
955            0.00
956            0.00
957            0.00
958            0.00
959            0.00
960            0.00
961            0.00
962            0.00
963            0.00
964            0.00
965            0.00
966            0.00
967            0.00
968            0.00
969            0.00
970            0.00
971            0.00
972            0.00
973            0.00
974            0.00
975            0.00
976            0.00
977            0.00
978            0.00
979            0.00
980            0.00
981            0.00
982            0.00
983            0.00
984            0.00
985            0.00
986            0.00
987            0.00
988            0.00
989            0.00
990            0.00
991            0.00
992            0.00
993            0.00
994            0.00
995            0.00
996            0.00
997            0.00
998            0.00
999            0.00
1000           0.00
1001           0.00
1002           0.00
1003           0.00
1004           0.00
1005           0.00
1006           0.00
1007           0.00
1008           0.00
1009           0.00
1010           0.00
1011           0.00
1012           0.00
1013           0.00
1014           0.00
1015           0.00
1016           0.00
1017           0.00
1018           0.00
1019           0.00
1020           0.00
1021           0.00
1022           0.00
1023           0.00
1024           0.00
1025           0.00
1026           0.00
1027           0.00
1028           0.00
1029           0.00
1030           0.00
1031           0.00
1032           0.00
1033           0.00
1034           0.00
1035           0.00
1036           0.00
1037           0.00
1038           0.00
1039           0.00
1040           0.00
1041           0.00
1042           0.00
1043           0.00
1044           0.00
1045           0.00
1046           0.00
1047           0.00
1048           0.00
1049           0.00
1050           0.00
1051           0.00
1052           0.00
1053           0.00
1054           0.00
1055           0.00
1056           0.00
1057           0.00
1058           0.00
1059           0.00
1060           0.00
1061           0.00
1062           0.00
1063           0.00
1064           0.00
1065           0.00
1066           0.00
1067           0.00
1068           0.00
1069           0.00
1070           0.00
1071           0.00
1072           0.00
1073           0.00
1074           0.00
1075           0.00
1076           0.00
1077           0.00
1078           0.00
1079           0.00
1080           0.00
1081           0.00
1082           0.00
1083           0.00
1084           0.00
1085           0.00
1086           0.00
1087           0.00
1088           0.00
1089           0.00
1090           0.00
1091           0.00
1092           0.00
1093           0.00
1094           0.00
1095           0.00
1096           0.00
1097           0.00
1098           0.00
1099           0.00
1100           0.00
1101           0.00
1102           0.00
1103           0.00
1104           0.00
1105           0.00
1106           0.00
1107           0.00
1108           0.00
1109           0.00
1110           0.00
1111           0.00
1112           0.00
1113           0.00
1114           0.00
1115           0.00
1116           0.00
1117           0.00
1118           0.00
1119           0.00
1120           0.00
1121           0.00
1122           0.00
1123           0.00
1124           0.00
1125           0.00
1126           0.00
1127           0.00
1128           0.00
1129           0.00
1130           0.00
1131           0.00
1132           0.00
1133           0.00
1134           0.00
1135           0.00
1136           0.00
1137           0.00
1138           0.00
1139           0.00
1140           0.00
1141           0.00
1142           0.00
1143           0.00
1144           0.00
1145           0.00
1146           0.00
1147           0.00
1148           0.00
1149           0.00
1150           0.00
1151           0.00
1152           0.00
1153           0.00
1154           0.00
1155           0.00
1156           0.00
1157           0.00
1158           0.00
1159           0.00
1160           0.00
1161           0.00
1162           0.00
1163           0.00
1164           0.00
1165           0.00
1166           0.00
1167           0.00
1168           0.00
1169           0.00
1170           0.00
1171           0.00
1172           0.00
1173           0.00
1174           0.00
1175           0.00
1176           0.00
1177           0.00
1178           0.00
1179           0.00
1180           0.00
1181           0.00
1182           0.00
1183           0.00
1184           0.00
1185           0.00
1186           0.00
1187           0.00
1188           0.00
1189           0.00
1190           0.00
1191           0.00
1192           0.00
1193           0.00
1194           0.00
1195           0.00
1196           0.00
1197           0.00
1198          26.16
1199          26.16
1200          26.16
1201          26.34

Here in the 0s, I want the 25.32 value. The point is, initially my data starts at 0.

How can we do this in R?

Any help would be appreciated.

Thanks

like image 673
haimen Avatar asked Nov 28 '25 10:11

haimen


1 Answers

This approach should work (following a suggestion by @A.Webb):

# example
DF <- data.frame(a=c(0,2,0,3))
#   a
# 1 0
# 2 2
# 3 0
# 4 3

# replacement
w    <- which(DF$a==0)
DF$a <- replace(DF$a, w, c(NA,DF$a)[w])
#    a
# 1 NA
# 2  2
# 3  2
# 4  3

This approach does not fill in strings of zeroes (not mentioned initially by the OP), which I think require an entirely different approach (posted in a separate answer).

like image 186
Frank Avatar answered Nov 30 '25 01:11

Frank



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!