R-累计金额-“累计金额”;例如;布尔向量上的运算
我正在努力解决一个特殊的数据操作问题。我最近发布了这篇文章,有人建议在zoo库中使用na.locf函数,但这是一个家庭作业问题,TA指定不加载其他库来解决此问题,因此我需要使用更传统的数据处理方法。我们得到了以下数据帧,我显示了数据帧的前10行:R-累计金额-“累计金额”;例如;布尔向量上的运算,r,data-manipulation,R,Data Manipulation,我正在努力解决一个特殊的数据操作问题。我最近发布了这篇文章,有人建议在zoo库中使用na.locf函数,但这是一个家庭作业问题,TA指定不加载其他库来解决此问题,因此我需要使用更传统的数据处理方法。我们得到了以下数据帧,我显示了数据帧的前10行: my_df[1:10,1:2] DATE FLIGHT 1 May 26 NA 2 Jun 10 NA 3 Jun 21 NA 4 1 5 2 6
my_df[1:10,1:2]
DATE FLIGHT
1 May 26 NA
2 Jun 10 NA
3 Jun 21 NA
4 1
5 2
6 3
7 Jun 23 NA
8 1
9 2
10 Jun 25 NA
我需要向下拖动日期列中的值,其中有空格(第4-6行全部为6月21日,第8-9行全部为6月23日,等等)。我理解na.locf是如何制作一行的,可惜我不能使用它
我的想法如下:
repeat_dates = my_df$DATE[which(my_df$FLIGHT == 1)-1]
repeat_count = [3, 2, ...]
["Jun 21", "Jun 21", "Jun 21", "Jun 23", "Jun 23", ...]
dput(my_df[1:20,1:2])
structure(list(DATE = structure(c(-23961, -23946, -23935, NA,
NA, NA, -23933, NA, NA, -23931, -23911, -23893, NA, NA, -23891,
NA, NA, -23890, NA, NA), class = "Date"), FLIGHT = c(NA, NA,
NA, 1L, 2L, 3L, NA, 1L, 2L, NA, NA, NA, 1L, 2L, NA, 1L, 2L, NA,
1L, 2L)), .Names = c("DATE", "FLIGHT"), row.names = c(NA, 20L
), class = "data.frame")
for(i in 1:length(my_df$DATE)){
如果(my_df$日期[i]=“”){
my_df$DATE[i]我在共享链接中使用了一个解决方案:
replace_na_with_last<-function(x,a=!is.na(x)){
x[which(a)[c(1,1:sum(a))][cumsum(a)+1]]
}
replace\u na\u with_last您可以在日期为空时使用for循环和if语句将其替换为上一个值。查看可能的重复感谢我在这里使用了一个解决方案,请欣赏它,即使您不能使用na.locf
本身,也可以查看它的源代码。是的这比我的方法简单得多
replace_na_with_last<-function(x,a=!is.na(x)){
x[which(a)[c(1,1:sum(a))][cumsum(a)+1]]
}