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