【问题标题】:Is it possible to aggregate data.table using column number and not column names in large dataset?是否可以使用列号而不是大型数据集中的列名来聚合 data.table?
【发布时间】:2018-01-09 21:09:09
【问题描述】:

我正在尝试聚合一个 data.table。更准确地说,我有一个包含 202 列的 data.table,我想aggregate(dt[,131:202]~dt[,1:130],data=dt,FUN=sum)。 这是一个data.table,您可以尝试一下。

A <- c(1,2,3,4,4,6,4)
B <- c("a","b","c","d","e","f","g")
C <- c(10,11,23,8,8,1,3)
D <- c(2,3,5,9,7,8,4)
E <- c(2,5,7,1,4,6,15)
G <- c("b","f","s","k","t","r","n")
H <- c(2,68,5,27,11,17,4)


dt <- data.table(A,B,C,D,E,G,H)

【问题讨论】:

  • 到目前为止你尝试过什么?什么没有奏效?尝试表现出一些努力

标签: r data.table aggregate


【解决方案1】:

data.table 选项是在.SDcols 中指定感兴趣的列,对by 中的列进行分组,遍历.SD(data.table 的子集)并获取sum

dt[, lapply(.SD, sum), by = c(names(dt)[1:130]), .SDcols = 131:202]

数据

set.seed(24)
d1 <- as.data.frame(matrix(sample(LETTERS[1:7], 130*20, replace = TRUE),
        20, 130), stringsAsFactors=FALSE)
d2 <- as.data.frame(matrix(sample(1:20, 130*20, replace = TRUE), 20, 
       130), stringsAsFactors=FALSE)
dt <- data.table(d1, d2)
names(dt) <- make.unique(names(dt))

【讨论】:

  • 你认为我也可以在同一行粘贴吗?我的意思是我要粘贴一列,假设它是第 5 列。
  • 最后,它不起作用,我不知道为什么,但是 agrgegate 是好的,但不是总和:/
  • @OrhanYazar 在我尝试的测试数据集上,它正在工作。您可能需要检查 str 列是否为 numeric 类。如果不是数字,则不起作用
  • 我怎么能精确的崩溃=“;”在粘贴吗?
  • @OrhanYazar toStringpaste(..., collapse=", ") 您可以将其替换为 paste, collapse=";"
猜你喜欢
  • 2021-04-16
  • 2021-09-09
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
相关资源
最近更新 更多