Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于上一列值的起始列行值-R_R_Dataframe_Multiple Columns_Rows_Shift - Fatal编程技术网

基于上一列值的起始列行值-R

基于上一列值的起始列行值-R,r,dataframe,multiple-columns,rows,shift,R,Dataframe,Multiple Columns,Rows,Shift,我有一个数据框,如下所示: xR <- data.frame("A" = c(15, 13.5, 12, 9.1, NA, NA, NA, NA), "B" = c(NA, 13.6, 8.4, 6.7, 5.6, 2.0, NA, NA), "C" = c(NA, NA, 8.5, 2.43, 1.23, NA, NA, NA)) xR这里有一种方法。在每列中: 首先,确定第一个非NA位

我有一个数据框,如下所示:

xR <- data.frame("A" = c(15, 13.5, 12, 9.1, NA, NA, NA, NA), 
         "B" = c(NA, 13.6, 8.4, 6.7, 5.6, 2.0, NA, NA), 
         "C" = c(NA, NA, 8.5, 2.43, 1.23, NA, NA, NA))

xR这里有一种方法。在每列中:

首先,确定第一个非NA位置

for (i in 2:ncol(xR)) {
  first_non_NA_position <- which.min(is.na(xR[[i]]))
  new_position <- min(which(xR[[i]][first_non_NA_position] < xR[[i-1]]))
  position_diff <- first_non_NA_position - new_position
  if (position_diff > 0) {
    xR[[i]] <- c(tail(xR[[i]], -position_diff), rep(NA, position_diff))
  }
}
第二,确定要将第一个非NA位置移动到的新位置。当第一个非NA位置的值小于上一列中的值时,这将是最小值

第三,通过新位置和第一个非NA位置之间的差值移动该列的向量

for (i in 2:ncol(xR)) {
  first_non_NA_position <- which.min(is.na(xR[[i]]))
  new_position <- min(which(xR[[i]][first_non_NA_position] < xR[[i-1]]))
  position_diff <- first_non_NA_position - new_position
  if (position_diff > 0) {
    xR[[i]] <- c(tail(xR[[i]], -position_diff), rep(NA, position_diff))
  }
}

你以前没有问过这个问题吗?没有,这和@onyanbu有点不同。很抱歉造成混淆。@user1655130只是想澄清一下,如果C列开始于B列的同一行,C列的第一个值(8.5)低于B列的相应行,它应该与13.6而不是8.4对齐吗?是的,正是@Ben
     A    B    C
1 15.0 13.6 8.50
2 13.5  8.4 2.43
3 12.0  6.7 1.23
4  9.1  5.6   NA
5   NA  2.0   NA
6   NA   NA   NA
7   NA   NA   NA
8   NA   NA   NA