当前位置: 首页 > 知识库问答 >
问题:

基于R中的值进行迭代和赋值的函数

司空繁
2023-03-14

我想写一个函数,迭代通过一个帐户列表,每个帐户都有一个相关联的值,并分配该帐户与名称列表中的一个名称。名称列表将有相关联的值,我希望分配的名称是具有最小值的名称。

name    totalvalue
Jeff    54
Christy 43
Matt    29
Jessica 19


accounts   value   name
acc1       8
acc2       7
acc3       7
acc4       7
acc5       6
acc6       6
acc7       5
acc8       3

我想的是迭代帐户列表,看看名字列表。首先看acc1,将其分配给名字列表的最小值。acc1的名字变成杰西卡,杰西卡的总价值被acc1值增强...杰西卡变成27,然后acc2去杰西卡再次使杰西卡35,acc3然后找到马特谁是现在的最小,并相应地分配它等。

到目前为止我拥有的:

F <- function(listofnames, listofaccounts){
        for (account in listofaccounts){
            name <- min(listofnames$totalvalue)
            listofaccounts$name <- name
           }

我知道这有很多原因。我也在考虑做一个while循环。。

F <- function(listofnames, listofaccounts){
        count <- 8
        while (count > 0){
           for (account in listofaccounts){
               name <- min(listofnames$totalvalue)
               listofaccounts$name <- name
               count <- count - 1 
           }
        }
     }

请帮帮忙!谢谢你亲切:)

共有1个答案

养昊天
2023-03-14

这不是很快,但应该可以:

myfunc <-function(names, vals){
  for(i in 1:nrow(vals)){ #for each row
    idx <- which.min(names$totalvalue) #we find the index of the current min
    names$totalvalue[idx] <- names$totalvalue[idx] + vals$value[i] #add to the current min the current number
    vals$names[i] <- as.character(names$name[idx]) #add to the name list, the name of the current min
  }
  return(list(names, vals)) #return a list of the two outputs
}
myfunc(x,y)

[[1]]
     name totalvalue
1    Jeff         54
2 Christy         46
3    Matt         47
4 Jessica         47

[[2]]
  accounts value   names
1     acc1     8 Jessica
2     acc2     7 Jessica
3     acc3     7    Matt
4     acc4     7 Jessica
5     acc5     6    Matt
6     acc6     6 Jessica
7     acc7     5    Matt
8     acc8     3 Christy
 类似资料:
  • 标题有点混乱,很抱歉,所以我有一个太多的数组,其中一个数组比第二个数组包含更多 所以我想做的是例如 这只会注销第一个一次,但我想要的是日志y和x长度一样多,希望这是足够清楚的

  • 问题内容: 我收到一个迭代器作为参数,并且想对值进行两次迭代。 可能吗 ?怎么样 ?签名是由我使用的框架(即Hadoop)强加的。 -编辑- 最后,该方法的真正签名是一个。我被这个Wiki页面所迷住了(实际上这是我发现的唯一不被弃用(但错误的)单词计数示例)。 问题答案: 如果要再次迭代,我们必须缓存来自迭代器的值。至少我们可以将第一次迭代和缓存结合起来: (只需要添加代码答案,就知道您在自己的注

  • 长期潜伏者,首次海报。我对R比较陌生,我正在清理一个200行的调查数据集。该调查使用了相当多的分支,并且在参与者没有收到问题的情况下返回NAs,因此它抛开了我缺失的数据分析。我花了一天半的时间试图找出一个雄辩的解决方案(用于循环、if条件、filter(dplyr)、mutate(dplyr)、case_when)。我确定了一个使用mutate()的解决方案,但我知道有更好的方法来实现这一点。 我

  • 很多从 Java、C 语言转向 Python 的程序员对 Python 中的赋值语句感到很神奇或者很困惑, Python 中赋值的特殊之处有 3 点特殊之处:出 0-127 的数字、部分字符串外都是引用赋值; 和其它支持函数式编程范式的语言一样,支持模式匹配;Python 支持连续赋值。 模式匹配 支持函数式编程范式的语言通常也支持模式匹配,例如在 Erlang 中我可以这样赋值: [Head |

  • 本文向大家介绍如何基于R数据帧列的值获取行索引?,包括了如何基于R数据帧列的值获取行索引?的使用技巧和注意事项,需要的朋友参考一下 R数据帧的一行可以在列中具有多种方式,并且这些值可以是数字,逻辑,字符串等。基于行号查找值很容易,但是基于值查找行号却很不同。如果要在特定列中查找特定值的行号,则可以提取整行,这似乎是一种更好的方法,可以使用单个方括号来获取行的子集。 示例 请看以下数据帧- 输出结果

  • 合并和拆分迭代器 # itertools_chain.py from itertools import * for i in chain([1, 2, 3], ['a', 'b', 'c']): print(i, end=' ') print() # itertools_chain_from_iterable.py from itertools import * def make_