Data.table:参考每组中的设定值,对组应用函数。将结果列传递到函数中

2023-12-12

我有长格式的数据,将按地理位置分组。我想计算每组中一个感兴趣的变量与所有其他感兴趣的变量之间的差异。我无法弄清楚如何在单个数据表语句中有效地执行此操作,因此采取了一种解决方法,该解决方法也在此过程中引入了一些新错误(我用更多解决方法修复了这些错误,但也将不胜感激!)。

然后我想将结果列传递到 ggplot 函数中,但是无法使推荐的方法起作用,因此我使用了已弃用的方法。

library(data.table)
library(ggplot2)

set.seed(1)
results <- data.table(geography = rep(1:4, each = 4),
                      variable = rep(c("alpha", "bravo", "charlie", "delta"), 4),
                      statistic = rnorm(16) )

> results[c(1:4,13:16)]
   geography variable   statistic
1:         1    alpha -0.62645381
2:         1    bravo  0.18364332
3:         1  charlie -0.83562861
4:         1    delta  1.59528080
5:         4    alpha -0.62124058
6:         4    bravo -2.21469989
7:         4  charlie  1.12493092
8:         4    delta -0.04493361

base_variable <- "alpha"

从这一点来看,我理想地想编写一段简单的代码,按地理位置分组,然后以相同的格式返回该表,但每个组中每个变量的统计数据为(base_variable - 变量)。

我不知道如何做到这一点,所以我的解决方法如下,任何有关更好方法的建议都将受到赞赏。

# Convert to a wide table so we can do the subtraction by rows
results_wide <- dcast(results, geography ~ variable, value.var = "statistic")

   geography      alpha      bravo    charlie       delta
1:         1 -0.6264538  0.1836433 -0.8356286  1.59528080
2:         2  0.3295078 -0.8204684  0.4874291  0.73832471
3:         3  0.5757814 -0.3053884  1.5117812  0.38984324
4:         4 -0.6212406 -2.2146999  1.1249309 -0.04493361

this_is_a_hack <- as.data.table(lapply(results_wide[,-1], function(x) results_wide[, ..base_variable] - x))

   alpha.alpha bravo.alpha charlie.alpha delta.alpha
1:           0  -0.8100971     0.2091748  -2.2217346
2:           0   1.1499762    -0.1579213  -0.4088169
3:           0   0.8811697    -0.9359998   0.1859381
4:           0   1.5934593    -1.7461715  -0.5763070

现在名字已经乱了,我们也没有地理。为什么名字是这样的?另外,需要重新添加地理。

this_is_a_hack[, geography := results_wide[, geography] ]

normalise_these_names <- colnames(this_is_a_hack)
#Regex approach. Hacky and situational. 
new_names <- sub("\\.(.*)", "", normalise_these_names[normalise_these_names != "geography"] )
normalise_these_names[normalise_these_names != "geography"] <- new_names
#Makes use of the fact that geographies will appear last in the data.table, not generalisable approach.
colnames(this_is_a_hack) <- normalise_these_names 

我不再需要基本变量,因为所有值都为零,所以我尝试删除它,但我似乎无法按照通常的方式执行此操作:

this_is_a_hack[, ..base_variable := NULL] 
Warning message:
In `[.data.table`(this_is_a_hack, , `:=`(..base_variable, NULL)) :
  Column '..base_variable' does not exist to remove

library(dplyr)
this_is_a_hack <- select(this_is_a_hack, -base_variable)

final_result <- melt(this_is_a_hack, id.vars = "geography")

> final_result[c(1:4,9:12)]
   geography variable      value
1:         1    bravo -0.8100971
2:         2    bravo  1.1499762
3:         3    bravo  0.8811697
4:         4    bravo  1.5934593
5:         1    delta -2.2217346
6:         2    delta -0.4088169
7:         3    delta  0.1859381
8:         4    delta -0.5763070

数据现在可以可视化了。我试图将这些变量传递到绘图函数中,但是与数据帧相比,引用 data.table 列似乎很困难。显然,您应该使用 quosures 将 data.table 变量传递到函数中,但这只是出错了,所以我使用已弃用的 'aes_string' 函数来代替 - 对此的帮助也值得赞赏。

plott <- function(dataset, varx, vary, fillby) {
  # varx <- ensym(varx)
  # vary <- ensym(vary)
  # vary <- ensym(fillby)
  ggplot(dataset, 
         aes_string(x = varx, y = vary, color = fillby)) + 
    geom_point()
}

plott(dataset = final_result,
      varx = "geography",
      vary = "value",
      fillby = "variable")

# Error I get when I try the ensym(...) method in the function:
Don't know how to automatically pick scale for object of type name. Defaulting to continuous. (this message happens 3 times)
Error: Aesthetics must be valid data columns. Problematic aesthetic(s): x = varx, y = vary, colour = fillby. 
Did you mistype the name of a data column or forget to add stat()?

一个选项是通过使用按“地理”分组的“base_variable”元素创建基于“变量”的逻辑条件来对“统计数据”进行子集化

results[, .(variable, diff = statistic - statistic[variable == base_variable]), 
       by = geography][variable != base_variable]
# geography variable       diff
# 1:         1    bravo  0.8100971
# 2:         1  charlie -0.2091748
# 3:         1    delta  2.2217346
# 4:         2    bravo -1.1499762
# 5:         2  charlie  0.1579213
# 6:         2    delta  0.4088169
# 7:         3    bravo -0.8811697
# 8:         3  charlie  0.9359998
# 9:         3    delta -0.1859381
#10:         4    bravo -1.5934593
#11:         4  charlie  1.7461715
#12:         4    delta  0.5763070
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Data.table:参考每组中的设定值,对组应用函数。将结果列传递到函数中 的相关文章

  • R 中的 NA 替换函数

    我正在尝试替换矩阵中的 NA mat 零 我在用着mat is na mat lt 0 当我有 18946 个变量的 94531 个观察值或更小的矩阵时 效果很好 但我在 22752 个变量的 112039 个观察值的矩阵上尝试它 R 显示
  • 将 JSON URL 转换为 R 数据帧

    我在将 JSON 文件 从 API 转换为 R 中的数据帧时遇到问题 例如 URL 我尝试了 S O 的一些不同建议 包括将json数据转换为R中的数据框 https stackoverflow com questions 28683769
  • 使用底格里斯河从纬度/经度获取人口普查区

    我有相对较多的坐标 我想获取其人口普查区 除了 FIPS 代码 我知道我可以使用以下命令查找各个纬度 经度对call geolocator latlon 已完成here https stackoverflow com questions 5
  • 在函数内部调用 clusterApply 时,性能会下降

    我遇到了一个奇怪的问题clusterApply 我已经能够尽可能地隔离它 如下所示 首先 我从全局环境运行以下代码 require parallel cl lt makeCluster rep localhost 20 SOCK xl lt
  • ggplot 中的错误问题:“grid.Call(”L_textBounds“, as.graphicsAnnot(x$label), x$x, x$y, … 中的错误”[重复]

    这个问题在这里已经有答案了 我试图在 ggplot 中制作一个条形图 其中我通过强制其中一些标签为长度为零的字符串 即 来指定要显示的标签 但是 我收到错误 Error in grid Call L textBounds as graphi
  • 如何更新条件公式?

    让我直接进入示例 考虑以下等式 frml lt formula y a b x z 使用这样的公式规范 例如和AER ivreg 我想更新这个公式 使其显示为 frml2 lt y a b c x z w 但是 我不确定如何更新条件标志之前
  • 在 R 中绘制对数正态概率密度

    我正在尝试在 R 中生成对数正态概率密度图 其中包含 3 个不同的均值对数和标准差对数 我尝试了以下方法 但我的图表太丑了 看起来一点也不好看 x lt seq 0 10 length 100 a lt dlnorm x meanlog 0
  • 当每个记录都是一个段落并且某些记录有 4 个字段而其他记录有 6 个字段时,如何将文本文件读入 R

    如何读取文本文件 其中每条记录都是一个段落 每个换行符表示单独的字段 复杂的是 有些记录有 4 行 有些记录有 6 行 当字段数量的差异为 1 时 DWin 解决了我的问题 但当字段数量差异为 2 时 一切都崩溃了 你可以有一个在这里看看他
  • R 编程:如何计算数据框中两个单元格之间的差异并将它们保存在新列中

    尝试学习 R 并陷入自相关示例中 我想将 x 的差异与 y 的差异进行回归 我在数据框中有 x 和 y 并且希望将 x2 x1 的差值保存在新列 例如 dx 中 我不知道该怎么做 我拥有的 data1 x y 5 3 8 9 3 1 1 5
  • 如何更改 Shiny 中 navbarPage 折叠的断点

    我想用shiny navbarPage collapsible TRUE 当在小屏幕上查看我的 Shiny 应用程序时 将导航元素折叠到菜单中 默认情况下 当浏览器宽度小于 940 像素时会触发折叠 有什么方法可以改变这一点 以便在稍大的浏
  • 逻辑回归/二项式的 glmnet 误差

    当尝试将 glmnet 与 family binomial 配合以进行逻辑回归拟合时 出现此错误 gt data lt read csv DAFMM HE16 matrix csv header F gt x lt as data fram
  • 仅保留百分比的尾随零

    给出以下示例 library pander tableAbs lt Titanic 1 1 tablePct lt round prop table tableAbs 100 2 table lt cbind tableAbs tableP
  • 将数据从 R 导出到 Excel

    我试图将从 R 获得的一些结果导出到 Excel 中 但未成功 我尝试过以下代码 write table ALBERTA1 D ALBERTA1 txt sep t write csv ALBERTA1 ALBERTA1 csv your
  • C# 问题:加载 .MDB 文件、对其进行更改并将更改保存回原始文件的最简单方法是什么?

    我正在进行的项目即将完成 我正在加载一个 MDB 文件 在 DataGrid 上显示内容 并尝试在 DataGrid 上获取这些更改并将它们保存回 MDB 文件中 我还将创建一个函数 允许我从一个 MDB 文件中获取表并将其保存到另一个 M
  • R:表格格式

    我有一个包含以下列的 Excel 文件 Column1 Column2 Column3 ab bb 0 5 ab bc 0 1 ab cd 0 7 ab dd 0 8 ac bb 0 2 ac bg 0 8 ac ee 0 8 ac dd
  • 为什么这些数字不相等?

    下面的代码显然是错误的 有什么问题 i lt 0 1 i lt i 0 05 i 1 0 15 if i 0 15 cat i equals 0 15 else cat i does not equal 0 15 i does not eq
  • r 中的 5 维图

    我正在尝试在 R 中绘制 5 维图 我目前正在使用rgl包以 4 个维度绘制数据 使用 3 个变量作为 x y z 坐标 另一个变量作为颜色 我想知道是否可以使用这个包添加第五个变量 例如空间中点的大小或形状 这是我的数据和当前代码的示例
  • 带 R 的多彩标题

    我想添加颜色某些词在我的图表标题中 我已经能够在这里找到一些先例 http blog revolutionanalytics com 2009 01 multicolor text in r html 具体来说 我希望用撇号括起来的文本 在
  • R - 通过覆盖和递归合并列表

    假设我有两个带有名字的列表 a list a 1 b 2 c list d 1 e 2 d list a 1 b 2 b list a 2 c list e 1 f 2 d 3 e 2 我想递归地合并这些列表 如果第二个参数包含冲突的值 则
  • 如何计算嵌套函数中的粘合表达式?

    我正在尝试嵌套一个函数 该函数将两个字符串粘合在一起 该函数使用组合字符串来命名数据帧的列 然而 问题似乎是粘合表达式没有足够早地评估为字符串 我可以 并且应该 强制在将表达式作为参数传递给另一个函数之前对其进行求值吗 library ti

随机推荐

  • 如何将javascript html dom文档存储到本地存储

    我有文档 组件树 m 我试图将其存储在 html5 的本地存储中 我尝试将其设置为本地存储 但是当我检索它时 这个m已经变成了 object Document 如何将文档存储到本地存储并将其作为文档本身检索 下面是我尝试过的代码 应用程序向
  • 水豚方法未定义

    我无法让水豚工作 我使用的是水豚2 0 0 我收到这个错误 Failure Error visit users sign in NoMethodError undefined method visit for
  • 使用 JavaScript 在文本字符串中插入隐藏字符

    如何使用 JavaScript 在文本字符串中使用隐藏字符 我读取并写回一个文本字符串 其中包含隐藏字符 因此重写的文本看起来与原始文本相同 尽管它包含隐藏字符 所以接下来当我阅读文本时 我可以知道该文本已被阅读 因为它包含隐藏字符 Eg
  • Yii 2. 在公共文件夹外上传文档

    我需要将文档上传到服务器 因为它是个人文档 所以他们希望将其上传到公共文件夹之外 我知道如何上传文件 if model gt load Yii app gt request gt post model gt document Uploade
  • 如何对流进行分区 (GroupBy) 并监视某些时间段内 Rx 中是否缺少元素?

    前几天我一直在尝试编写一个 Rx 查询来处理来自源的事件流并检查是否缺少某些 ID 缺席被定义为存在一系列时间窗口 例如 从 9 00 到 17 00 的所有日子 在此期间最多应该有 20 分钟没有 ID 出现在流中 更复杂的是 缺勤时间应
  • 谷歌眼镜(未安装)

    我是 Android Studio 和 google Glass 的新手 我正在尝试创建一个将使用 google glass 的已知项目 但我的问题是 当我必须检查 选择 glass 时 它已被禁用 并且我不知道如何解决此问题 请参见下图
  • Android XML 文件 java.lang.nullpointerexception

    我正在构建一个全新的 android 项目 这不是我的第一个 Android 应用程序 所以我更沮丧的是无法摆脱这个错误 我使用 XML 文件 该文件目前只有 3 个项目 并且 XML 选项卡中没有错误
  • 使用 graph api 私下发布到 Facebook 上的朋友墙

    我想从我的应用程序将提要发布到朋友墙上 并将其设置为私有 登录用户和朋友都可以查看 我想使用新的 Graph api 来做到这一点 我看到如果我在 feed 帖子中设置 to 参数 它将被发布到用户朋友墙上 I found a code h
  • Java Integer类中的getChars方法,为什么它使用按位运算而不是算术运算?

    所以我正在检查Integer的班级源代码 JDK 8 了解如何int转换为String 它似乎正在使用一个名为的包私有方法getChars 第 433 行 转换int to char array 虽然代码并不难理解 但是有多行代码使用了按位
  • Python .sort() 未按预期工作

    在一个安静的周六晚上解决一些难题 呜呼 不是 并且正在与 sort 作斗争 结果并不完全符合我的预期 该程序迭代 100 999 之间的每个组合 并检查该乘积是否为回文 如果是 请追加到列表中 我需要对列表进行排序 D 这是我的程序 lis
  • Scala:如何在超类中引用扩展类的类型?

    有没有办法定义类型T在父级中这样T将始终成为扩展类的实际类型 在本例中Child In Parent 我想强制执行 声明T始终是扩展类型 就好像我会写一样type T type of the extending class 在每个实际的扩展
  • 如何在表单之间交换数据[重复]

    这个问题在这里已经有答案了 可能的重复 在表单之间共享数据 我有 public partial class LoginForm Form private string somedata somedata public LoginForm I
  • pythonplotly-旋转辅助X轴标签

    假设我创建了一个像这样的情节图 x A A B B X Y X Y y 1 2 3 2 fig go Figure fig add bar x x y y fig show I get this I want to rotate the s
  • 如何以编程方式检查应用程序是否已安装?

    我正在开发一个 iPhone 应用程序 它将在企业中安装很少的第三方应用程序 我有有关捆绑包 ID 的信息 有没有办法使用某些系统 API 来检查应用程序是否已安装 目前 该应用程序将再次安装 覆盖当前安装 我需要以某种方式阻止这种情况 如
  • 以编程方式创建 SQL Server 代理作业

    我想以编程方式创建 SQL Server 代理作业 我正在使用以下代码 运行时不会抛出任何错误 但当我检查 SQL Server 代理时 我没有看到任何作业 所以问题 1 这是创造就业机会的正确方式吗 msdb from etgv125p
  • 使用 Jenkins 和 Xcode 7 构建 iOS 应用程序并通过 TestFlight 分发 .ipa

    Apple 发布了 Xcode 7 更新 再次破坏了一切 以前 我们必须处理 ResourceRules plist 无法读取资源 通过使用所描述的 hack 来解决问题 例如 here 有些人wonder为什么会发生这种事呢 然而 随着
  • scala 从资源目录读取文件时出现问题

    我写了这样的东西来从资源目录读取文件 val filePath MyClass getClass getResource myFile csv val file filePath getFile println file CSVReader
  • 如何将 Python 3.3 添加到 Powershell?

    嘿 我一直在尝试通过将路径中的 27 替换为 33 来将 Python 3 3 添加到 windows powershell 中 我尝试发布屏幕截图 但结果发现我需要 10 次代表 所以我只需复制并粘贴我尝试过的内容 Enviroment
  • 在 Netbeans 外部运行企业应用程序客户端

    我已按照此网页上的教程进行操作 https netbeans org kb docs javaee entappclient html 我想在 Netbeans 之外运行企业应用程序客户端 请注意 企业应用程序客户端与 Web 客户端不同
  • Data.table:参考每组中的设定值,对组应用函数。将结果列传递到函数中

    我有长格式的数据 将按地理位置分组 我想计算每组中一个感兴趣的变量与所有其他感兴趣的变量之间的差异 我无法弄清楚如何在单个数据表语句中有效地执行此操作 因此采取了一种解决方法 该解决方法也在此过程中引入了一些新错误 我用更多解决方法修复了这