在函数中使用data.table进行dcast

普罗米修斯

我正在尝试将下面已经工作的代码转换为函数。

此处已经讨论了类似的情况dcast + DT 但是我无法解决那样的问题。

我想要实现的是:

  • 多行代码仅更改两个参数,并且
  • 将函数中每一行创建的对象写入工作目录

这是已经起作用的代码:

result1 <- dcast(setDT(data), customer_id ~ paste0("num_of_oranges",period), value.var = "num_of_oranges", sum)
result2 <- dcast(setDT(data), customer_id ~ paste0("num_of_oranges",period) + paste0("SIGN_",sign), value.var = "num_of_oranges", sum)
result3 <- dcast(setDT(data), customer_id ~ paste0("num_of_oranges",period) + paste0("SIGN_",sign) + paste0("ORIGIN_",origin), value.var = "num_of_oranges", sum)

我对函数的尝试:

create.Feature <-function(col1,stat){

  test1 <- dcast(df, df[[id]] ~ paste0("col1",df[[period]]), value.var = df[["col1"]], stat)  
 return(test1)
  test2 <- dcast(df, df[[id]] ~ paste0("col1",df[[period]]) + paste0("SIGN",df[[sign]]), value.var = df[["col1"]], stat)
  return(test2)
  test3 <- dcast(df, df[[id]] ~ paste0("col1",df[[period]]) + paste0("SIGN",df[[sign]]) + paste0("ORIGIN",df[[origin]]), value.var = df[["col1"]], stat)
  return(test3)

并致电:

test_result <- create.Feature("num_of_oranges", sum)

我收到以下错误:.subset2(x,i,确切=准确)中的错误:级别1上没有这样的索引

任何人?

lao_zhang

我尝试使用mtcars数据集重现您的功能。

代码:

cars <- mtcars

result1 <- dcast(setDT(cars), cyl ~ paste0("disp", gear), 
                 value.var = "disp", 
                 sum)
result2 <- dcast(setDT(cars), cyl ~ paste0("disp", gear) + 
                       paste0("am", am),
                 value.var = "disp", 
                 sum)
result3 <- dcast(setDT(cars), cyl ~ paste0("disp", gear) + 
                       paste0("am", am) +
                       paste0("vs", vs),
                 value.var = "disp", 
                 sum)

create.Feature <- function(df, id, col1) {
      test1 <- dcast(df,
                     df[[id]] ~ paste0(col1, df[["gear"]]),
                     value.var = col1,
                     sum)
      test2 <- dcast(df,
                     df[[id]] ~ paste0(col1, df[["gear"]]) + 
                           paste0("am", df[["am"]]),
                     value.var = col1,
                     sum)
      test3 <- dcast(df,
                     df[[id]] ~ paste0(col1, df[["gear"]]) +
                           paste0("am", df[["am"]]) +
                           paste0("vs", df[["vs"]]),
                     value.var = col1,
                     sum)
      list(test1, test2, test3)
}

tr <- create.Feature(df = cars, 
                     id = "cyl", 
                     col1 = "disp")

输出:

tr
[[1]]
   df  disp3 disp4 disp5
1:  4  120.1 821.0 215.4
2:  6  483.0 655.2 145.0
3:  8 4291.4   0.0 652.0

[[2]]
   df disp3_am0 disp4_am0 disp4_am1 disp5_am1
1:  4     120.1     287.5     533.5     215.4
2:  6     483.0     335.2     320.0     145.0
3:  8    4291.4       0.0       0.0     652.0

[[3]]
   df disp3_am0_vs0 disp3_am0_vs1 disp4_am0_vs1 disp4_am1_vs0
1:  4           0.0         120.1         287.5             0
2:  6           0.0         483.0         335.2           320
3:  8        4291.4           0.0           0.0             0
   disp4_am1_vs1 disp5_am1_vs0 disp5_am1_vs1
1:         533.5         120.3          95.1
2:           0.0         145.0           0.0
3:           0.0         652.0           0.0

但是有几点:

  1. 您将一些变量硬编码到函数中(我假设),例如df[[sign]]df[[origin]],我也做了同样的事情。
  2. 我似乎无法stat进入函数,这就是为什么我sum代替而不是加入函数stat我不知道是什么问题。我尝试了match.fun()do.call,但似乎无法使其正常工作。
  3. 在你的函数,test3是最后一个发言,我假设你想所有三个test1test2test3,所以我将它们结合在一起成一个列表,并让这成为输出(最后一条语句)。

不知道这是否是您想要的,如果不是,希望您尽快得到它。我个人不使用data.table,我使用更多dplyr

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Data.table中使用Summary函数

在data.table函数中使用by

在 R 中使用 data.table 和 is.na(x) 在函数内进行子集化

如何在函数中使用char变量对data.table中的列进行过滤?

data.table 中 dcast 的替代方法?

在函数/包中使用data.table(带有roxygen)

在 data.table 中使用 if 函数的警告消息

在函数中使用data.table怪异行为

如何在函数调用中使用data.table?

dcast.data.table中的大数值错误

用reshape2 ::: dcast转置data.table

data.table - 使用 ~ var|factor - cast / dcast 将 data.table 拆分为列表的元素

在用 data.table::dcast 创建的 data.table 上使用 pander 时出错

在data.table中使用grep进行子集化-unpredicatble

在R中使用data.table进行功能

根据data.table中列的最大值在dcast中自定义聚合函数?

如何在R中的data.table中使用自定义函数

在 data.table 构造函数中使用字符串作为列名

我是否需要在函数内的data.table对象中使用copy()?

在 R 中使用 do.call 和 .SD 在 data.table 中跨列应用函数

将别名列传递到要在data.table`by =`参数中使用的函数中

R data.table:在组合调用中使用优化的mean()函数?

如何在函数和循环中使用data.table?

R:在用户定义的函数中使用get和data.table

在R中的另一个函数中使用data.table

在 pymongo 中使用 lambda 函数进行查询?

在jsx中使用call进行调用的函数

在R中使用for函数进行子集

将dcast.data.table与日期值和聚合一起使用