我有一个数据帧,如下所示:
Col1 Col2
1 5
2 6
3 6
我想写一个while循环,它会找到最小和,在新的列中为该行加1,直到新的列sum为5。
例如:
Col1 Col2 Col1&Col2_sum New_Value
1 5 6 1
2 6 8 0
3 6 9 0
现在将5toColumn添加到第一行的col1中,因为6是最小值。
Col1 Col2 Col1&Col2_sum New_Value
6 5 11 1
2 6 8 1
3 6 9 0
现在将5加到第二个,因为8是最小的。
Col1 Col2 Col1&Col2_sum New_Value
6 5 11 1
7 6 13 1
3 6 9 1
现在将5加到第三个,因为9是最小的。
Col1 Col2 Col1&Col2_sum New_Value
6 5 11 2
7 6 13 1
8 6 14 1
现在将5加到第一个,因为11是最小的。(最终输出)
Col1 Col2 Col1&Col2_sum New_Value
11 5 16 2
7 6 13 2
8 6 14 1
发布于 2018-08-07 06:03:34
我用R试了一下,我之前的答案是Python。这个程序看起来很基础,因为我不是一个R程序员,但还是尝试了一下。至少它会帮助那些刚接触R的人(希望如此)。注意:代码可能是一种令人厌恶的编程方式。
process_dframe <- function(){
col1 = c(1, 2, 3)
col2 = c(5, 6, 6)
new_value = c(0, 0, 0)
dframe <- data.frame(col1, col2, new_value)
print(dframe)
new_val_col_sum <- 0
col1_increment <- 5
size <- length(dframe$col1)
print(size)
while(new_val_col_sum < 5) {
if(new_val_col_sum > 0) {
dframe$col1[min_row] <- sum(dframe$col1[min_row], col1_increment)
}
min_sum <- as.integer(.Machine$integer.max)
min_row <- 0
for(i in 1:size) {
crnt_sum <- sum(dframe$col1[i], dframe$col2[i])
if(crnt_sum < min_sum) {
min_sum <- crnt_sum
min_row <- i
}
}
dframe$new_value[min_row] <- sum(dframe$new_value[min_row], 1)
new_val_col_sum <- sum(new_val_col_sum, 1)
}
return(dframe)
}
d <- process_dframe()
print(d)
输出col1 col2 new_value 1 1 5 0 2 2 6 0 3 3 6 0 [1] 3 col1 col2 new_value 1 1 5 1 2 2 6 0 3 3 6 0 col1 col2 new_value 1 6 5 1 2 2 6 1 3 3 6 0 col1 col2 new_value 1 6 5 1 2 7 6 1 3 3 6 1 col1 col2 new_value 1 6 5 2 2 7 6 1 3 8 6 1 col1 col2 new_value 1 11 5 2 2 7 6 2 3 8 6 1
https://stackoverflow.com/questions/51715213
复制相似问题