首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用函数中的char变量对data.table中的列进行筛选?

如何使用函数中的char变量对data.table中的列进行筛选?
EN

Stack Overflow用户
提问于 2019-11-28 21:10:15
回答 2查看 119关注 0票数 3

如何使用char变量对所选列进行筛选?

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

data = data.table(val = c(NA, 1, 2, 3, 4, 5))

dataFun = function(dt, number) {
   colname = paste0("value_", number)
   dt = dt[, (colname) := val + number]
   # the lines below do not work
   dt[is.na(colname), colname] = 0
   dt[colname < 3, colname] = 3
   dt[colname > 5, colname] = 5
   return(dt)
}

data = dataFun(data, 1)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-28 21:42:01

我们可以在.SDcols中指定.SDcols,也可以在转换成符号后使用eval

代码语言:javascript
复制
dataFun <- function(dt, number) {
   colname <- paste0("value_", number)
   dt <- dt[, (colname) := val + number]
   colnm <- as.name(colname)
   dt[is.na(eval(colnm)), (colname)  := 0
          ][eval(colnm) < 3, (colname) := 3
           ][eval(colnm) > 5, (colname) := 5][]


 }

dataFun(data, 1)
#   val value_1
#1:  NA       3
#2:   1       3
#3:   2       3
#4:   3       4
#5:   4       5
#6:   5       5
票数 1
EN

Stack Overflow用户

发布于 2019-11-28 22:03:31

@MichaelChirico提出的一种工作解决方案

代码语言:javascript
复制
dataFun = function(dt, number) {
   colname = paste0("value_", number)
   dt = dt[, (colname) := val + number]
   dt[is.na(get(colname)), (colname) := 0]
   dt[get(colname) < 3, (colname) := 3]
   dt[get(colname) > 5, (colname) := 5]
   return(dt)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59096176

复制
相关文章

相似问题

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