基于上一列值的起始列行值-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