基于前一列值的起始列行值 - R
starting column row values based on previous column value - R
我有一个数据框如下:
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))
是否可以移动 Col B 中的值,使其从 Col A 的同一行开始,其中 Col B 的第一个值低于 Col A 中对应的行值。
移动 Col C 中的值,使其从 Col B 的同一行开始,其中 Col C 的第一个值低于 Col B 中的相应行值,对于我的数据框中的每一列,依此类推。我的数据框有比这更多的列,所以需要尝试自动化它。
我希望得到以下结果:
xR1 <- data.frame("A" = c(15, 13.5, 12, 9.1, NA, NA, NA, NA),
"B" = c(13.6, 8.4, 6.7, 5.6, 2.0, NA, NA, NA),
"C" = c(NA, 8.5, 2.43, 1.23, NA,NA, NA, NA))
谢谢
这是一种方法。在每列中:
首先,确定第一个非 NA 位置。
其次,确定要将第一个非 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))
}
}
输出
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
我有一个数据框如下:
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))
是否可以移动 Col B 中的值,使其从 Col A 的同一行开始,其中 Col B 的第一个值低于 Col A 中对应的行值。 移动 Col C 中的值,使其从 Col B 的同一行开始,其中 Col C 的第一个值低于 Col B 中的相应行值,对于我的数据框中的每一列,依此类推。我的数据框有比这更多的列,所以需要尝试自动化它。
我希望得到以下结果:
xR1 <- data.frame("A" = c(15, 13.5, 12, 9.1, NA, NA, NA, NA),
"B" = c(13.6, 8.4, 6.7, 5.6, 2.0, NA, NA, NA),
"C" = c(NA, 8.5, 2.43, 1.23, NA,NA, NA, NA))
谢谢
这是一种方法。在每列中:
首先,确定第一个非 NA 位置。
其次,确定要将第一个非 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))
}
}
输出
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