r语言 - 修改 data.table 以仅包含一个变量的唯一值



我有一个数据表,我想修改一下。data.table 有许多列,其中n个我感兴趣,让我们说在这个例子中,来自 mtcars 的"cyl"、"hp"和"gear"很有趣。我想创建一个只有这三列的新数据表,其中只有三列之一的唯一值的行。这是我到目前为止所拥有的:

dt <- data.table(data)[, .(cyl, gear, hp)]   
dt[,unique(gear),by=.(cyl,hp)]
dt[,!duplicated(dt[,gear])

有没有更好的方法来做到这一点,有人可以帮助我了解如何将其变成一个函数,在其中指定数据和感兴趣的变量?到目前为止我的尝试:

fun_plot_gam <- function(data,var,var_list){
var_list = c("cyl","gear","hp")
var = "gear" #variable I'm interested in
var_list2 = var_list[which(var_list != var)]
dt <- data.table(mtcars)[, var_list, with=FALSE]
dt[,unique(var), by=var_list2,with=FALSE] #problem line
dt[,!duplicated(dt[,var])]
return(dt)

}

似乎我没有正确理解 data.table 来制作一个函数。如果有人能指导我快速了解何时在操作 data.tables 的函数中使用"get"、":="和点,我将不胜感激 =(

我们可以用getget'var' 的值

dt[,unique(get(var)), by=var_list2] 

-完整代码

如果我们在函数中传递"data"和其他参数,则无需在函数外部指定它(只是击败函数的目的(

fun_plot_gam <- function(data,var,var_list){
# get the vector of column names that are not in the 'var'
var_list2 <- setdiff(var_list, var)
# convert to data.table, subset the columns 
dt <- as.data.table(data)[, var_list, with=FALSE]
# get the `unique` elements of column specified in 'var' 
# grouped by 'var_list2' columns
dt1 <- dt[, unique(get(var)), by=var_list2]
setnames(dt1, ncol(dt1), var)
dt1
}
fun_plot_gam(mtcars, var, var_list)
#    cyl  hp gear
# 1:   6 110    4
# 2:   6 110    3
# 3:   4  93    4
# 4:   8 175    3
# 5:   6 105    3
# 6:   8 245    3
# 7:   4  62    4
# 8:   4  95    4
# 9:   6 123    4
#10:   8 180    3
#11:   8 205    3
#12:   8 215    3
#13:   8 230    3
#14:   4  66    4
#15:   4  52    4
#16:   4  65    4
#17:   4  97    3
#18:   8 150    3
#19:   4  91    5
#20:   4 113    5
#21:   8 264    5
#22:   6 175    5
#23:   8 335    5
#24:   4 109    4

最新更新