gpt4 book ai didi

data.table 中的行操作

转载 作者:行者123 更新时间:2023-12-04 20:08:43 26 4
gpt4 key购买 nike

我试图使用 data.table 按行执行简单的求和和均值,但我得到了意想不到的结果。我遵循了 FAQ manual for data.table 第 2 节中的帮助。我找到了一种可行的方法,但我不确定为什么常见问题解答第 2 节中的这种方法不可行。
这种方法给了我不正确的结果(即,它给了我第一列的值):

dt[, genesum:=lapply(.SD,sum), by=gene]
head(dt)

gene TCGA_04_1348 TCGA_04_1362 genesum
1: A1BG 0.94565 0.70585 0.94565
2: A1BG-AS 0.97610 1.15850 0.97610
3: A1CF 0.00000 0.02105 0.00000
4: A2BP1 0.00300 0.04150 0.00300
5: A2LD1 4.57975 5.02820 4.57975
6: A2M 60.37320 36.09715 60.37320

这给了我想要的结果
dt[, genesum:=apply(dt[,-1, with=FALSE],1, sum)]
head(dt)

gene TCGA_04_1348 TCGA_04_1362 genesum
1: A1BG 0.94565 0.70585 1.65150
2: A1BG-AS 0.97610 1.15850 2.13460
3: A1CF 0.00000 0.02105 0.02105
4: A2BP1 0.00300 0.04150 0.04450
5: A2LD1 4.57975 5.02820 9.60795
6: A2M 60.37320 36.09715 96.47035

我有更多的列和行,这只是一个子集。这与我设置 key 的方式有关吗?
tables()
NAME NROW MB COLS KEY
[1,] dt 20,785 2 gene,TCGA_04_1348_01A,TCGA_04_1362_01A,genesum gene

最佳答案

一些东西:

  • dt[, genesum:=lapply(.SD,sum), by=gene]dt[, genesum:=apply(dt[ ,-1],1, sum)]完全不同。
  • dt[, genesum:=lapply(.SD,sum), by=gene]循环 .SD data.table 并将它们相加
  • dt[, genesum:=apply(dt[, -1], 1, sum)]在行上循环(即 apply(x, 1, function)function 应用于 x
  • 中的每一行
  • 我想你可以通过调用rowSums得到你想要的。 ,像这样:
    dt[, genesum := rowSums(dt[, -1])]

  • 这就是你所追求的吗?

    关于data.table 中的行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21651978/

    26 4 0