首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更有效地更新数据框值?

如何更有效地更新数据框值?
EN

Stack Overflow用户
提问于 2021-07-13 20:28:57
回答 3查看 56关注 0票数 1

这是一个数据帧as blow:

代码语言:javascript
运行
复制
md <- data.frame(category=rep(LETTERS,3000000),
                 subcategory=rep(rev(LETTERS),3000000),
                 decategory=rep(rev(LETTERS),3000000),
                 amount=rnorm(26*3000000))

目前,我使用以下代码更新值,我想知道是否有其他更有效的方法?(对于本例,代码非常快。但是,在我的工作中,有时并不是那么快。所以我想知道有没有其他有效的代码来解决这个问题)

代码语言:javascript
运行
复制
md$amount[md$category=='B'&md$subcategory=='Y'&md$decategory=='Y'] <- 100
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-07-13 20:31:34

您可以使用data.table -

代码语言:javascript
运行
复制
library(data.table)

setDT(md)[category=='B' & subcategory=='Y' & decategory=='Y', amount := 100]
票数 2
EN

Stack Overflow用户

发布于 2021-07-13 21:06:57

如果您对相同的列重复执行这种类型的赋值,则将它们设置为键可能会有所帮助。在这种情况下,语法更简单,操作更快。

代码语言:javascript
运行
复制
library(data.table)
setDT(md)
setkey(md, category, subcategory, decategory)

md[c('B', 'Y', 'Y'), amount := 100]
票数 2
EN

Stack Overflow用户

发布于 2021-07-14 01:49:28

我们还可以使用

代码语言:javascript
运行
复制
library(data.table)
i1 <- setDT(md)[, Reduce(`&`, Map(`==`, .SD, c('B', 'Y', 'Y'))), 
       .SDcols = c('category', 'subcategory', 'decategory')]
md[i1, amount := 100]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68362428

复制
相关文章

相似问题

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