当前位置: 首页 > 知识库问答 >
问题:

使用 带 的均值。标清和 .Data.table 中的 SDcols

贡光明
2023-03-14

我正在编写一个非常简单的函数来汇总 data.tables 的列。我一次向函数传递一列,然后执行一些诊断以找出汇总选项,然后进行汇总。我在 data.table 中执行此操作,以允许一些非常大的数据集。

所以,我使用。SDol在列中传递以进行总结,并使用上的函数。SD在data.table表达式的j部分中。因为我一次传递一列,所以我没有使用lapplication。我发现有些函数有效,而另一些无效。下面是我正在使用的测试数据集和我看到的结果:

dt <- data.table(
  a=1:10, 
  b=as.factor(letters[1:10]), 
  c=c(TRUE, FALSE), 
  d=runif(10, 0.5, 100), 
  e=c(0,1), 
  f=as.integer(c(0,1)), 
  g=as.numeric(1:10), 
  h=c("cat1", "cat2", "cat3", "cat4", "cat5"))

mean(dt$a)
[1] 5.5

dt[, mean(.SD), .SDcols = "a"]

[1] NA
Warning message:
In mean.default(.SD) : argument is not numeric or logical: returning NA

dt[, sum(.SD), .SDcols = "a"]
[1] 55

dt[, max(.SD), .SDcols = "a"]
[1] 10

dt[, colMeans(.SD), .SDcols = "a"]
  a 
5.5 

dt[, lapply(.SD, mean), .SDcols = "a"]
     a
1: 5.5

有趣的是,当我使用加权时,加权平均给出了错误的答案(55,总和)。SD) 在 j 中。但是当我使用拉普利(.SD,加权均值)在j中,它给出了正确的答案(5.5,均值)。

我试着关闭data.table优化,看看是否是内部的data.table mean函数,但这并没有改变什么。

也许这只是在列表中使用means()的问题(这似乎是。SD返回的内容)?我想永远没有理由不使用lapplication范式与。SD?似乎只有lapplication选项返回一个data.table.其他似乎返回向量,除了colMeans它返回其他内容(列表?)。

我的主要问题是为什么<code>mean(.SD)

谢谢

共有1个答案

柴嘉石
2023-03-14

我认为,实现您想要的目标的适当方法是使用标准语法:

< code>dt[,lapply(。SD,均值)。SDcols = "a"]

或者,您可以按名称传递变量,如下所示:

col_to_pass = "a"
dt[ , mean(get(col_to_pass)) ]

最终,您可以将这种方法推广到多个列,如下所示:

col_to_pass = c("a", "d")
dt[ , lapply( mget(col_to_pass), mean) ]
 类似资料:
  • 我有数据。下表 我想按组查找每列中唯一值的总和。 我尝试了以下内容,它给了我每列中所有值的总和(但不是唯一值)。 然而,我只想找到唯一值的和。 答案应该是这样的- 谢谢

  • 我试图计算数据中几列(第一列除外)的平均值和标准差。具有<code>NA<code>值的帧。 我试过< code>colMeans、< code > sappy 等。,创建一个循环,遍历data.frame,然后将平均值和标准偏差存储在一个单独的表中,但不断得到一个“有趣的”错误。任何帮助都是巨大的。谢谢 一个

  • 概览 我有一个名为“subset_leaf_1”的数据集(见下文),显示了气候环境如何影响一种名为“栎树”的特定橡树物种的树冠指数。 我有一个名为Urbanisation_index(即下面的数据框)的列,其中包含四个子级别(即1,2,3和4)。每个子级别(1-4)都突出了围绕“栎属植物”的城市化程度。 我还想计算城市化指数各子级别的平均冠层指数。 问题 我想在dplyr包中使用data.tabl

  • 我是一名教师,希望正确使用<code>数据。表在<code>R 以下是MWE: 我的问题在于什么是正确的在<code>j,特别是当我们依赖另一个表时? 如下所示,问题1和问题2都有多个可能的正确答案。 虽然正确的列计算无误,但还是有些地方不对:例如,当< code >学生b回答问题时,他得到了正确的分数,尽管他回答错误。只有< code>correct列中的一些条目是关闭的,这使我相信我不明白变量

  • 我统一生成了随机数。现在我想使用高斯(正态分布)生成随机数。我不知道均值和标准差。我看过这篇文章:http://www.johndcook.com/cpp_tr1_random.html#normal,但它需要一个均值和标准差!我也知道Box-Muller变换是常用的。这正确地产生了正态分布的值。但我又不知道均值和标准偏差。请不要刺激。有人能帮忙吗?

  • 我试图使用pmin函数和数据计算跨行的最小值。表(类似于data.table中的post逐行操作和更新),但使用类似于<code>with=FALSE<code>语法和<code>na的列字符列表。rm=TRUE参数。 我可以直接使用列计算跨行的最小值: 给 但是,我正在尝试对自动生成的大量列执行此操作,并且我希望能够对存储在col_names变量< code>col_names中的任意列列表执行