首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在R中带有For循环的While循环

在R中带有For循环的While循环
EN

Stack Overflow用户
提问于 2018-08-07 04:30:07
回答 1查看 384关注 0票数 0

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

代码语言:javascript
复制
Col1     Col2 
   1        5
   2        6
   3        6

我想写一个while循环,它会找到最小和,在新的列中为该行加1,直到新的列sum为5。

例如:

代码语言:javascript
复制
Col1     Col2    Col1&Col2_sum     New_Value
   1        5                6             1
   2        6                8             0 
   3        6                9             0

现在将5toColumn添加到第一行的col1中,因为6是最小值。

代码语言:javascript
复制
Col1     Col2    Col1&Col2_sum     New_Value
   6        5               11             1
   2        6                8             1 
   3        6                9             0

现在将5加到第二个,因为8是最小的。

代码语言:javascript
复制
Col1     Col2    Col1&Col2_sum     New_Value
   6        5               11             1
   7        6               13             1 
   3        6                9             1

现在将5加到第三个,因为9是最小的。

代码语言:javascript
复制
Col1     Col2    Col1&Col2_sum     New_Value
   6        5               11             2
   7        6               13             1 
   8        6               14             1

现在将5加到第一个,因为11是最小的。(最终输出)

代码语言:javascript
复制
Col1     Col2    Col1&Col2_sum     New_Value
  11        5               16             2
   7        6               13             2 
   8        6               14             1
EN

回答 1

Stack Overflow用户

发布于 2018-08-07 06:03:34

我用R试了一下,我之前的答案是Python。这个程序看起来很基础,因为我不是一个R程序员,但还是尝试了一下。至少它会帮助那些刚接触R的人(希望如此)。注意:代码可能是一种令人厌恶的编程方式。

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51715213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档