使用“ftable”的属性来提取数据

2023-12-24

我有时会使用ftable其功能纯粹是为了表示层次类别。然而,有时,当表很大时,我想在使用它之前进一步对表进行子集化。

假设我们从以下开始:

mytable <- ftable(Titanic, row.vars = 1:3)
mytable
##                    Survived  No Yes
## Class Sex    Age                   
## 1st   Male   Child            0   5
##              Adult          118  57
##       Female Child            0   1
##              Adult            4 140
## 2nd   Male   Child            0  11
##              Adult          154  14
##       Female Child            0  13
##              Adult           13  80
## 3rd   Male   Child           35  13
##              Adult          387  75
##       Female Child           17  14
##              Adult           89  76
## Crew  Male   Child            0   0
##              Adult          670 192
##       Female Child            0   0
##              Adult            3  20

str(mytable)
##  ftable [1:16, 1:2] 0 118 0 4 0 154 0 13 35 387 ...
##  - attr(*, "row.vars")=List of 3
##   ..$ Class: chr [1:4] "1st" "2nd" "3rd" "Crew"
##   ..$ Sex  : chr [1:2] "Male" "Female"
##   ..$ Age  : chr [1:2] "Child" "Adult"
##  - attr(*, "col.vars")=List of 1
##   ..$ Survived: chr [1:2] "No" "Yes"
## NULL

因为没有dimnames,我无法以与具有对象的方式相同的方式提取数据dimnames。例如,我无法直接从“1st”和“3rd”类中提取所有“Child”值。

我目前的方法是将其转换为table,进行提取,然后将其转换回ftable.

Example:

mytable[c("1st", "3rd"), , "Child", ]
## Error: incorrect number of dimensions

## Only the underlying data are seen as having dims
dim(mytable)
## [1] 16  2

## I'm OK with the "Age" column being dropped in this case....
ftable(as.table(mytable)[c("1st", "3rd"), , "Child", ])
##              Survived No Yes
## Class Sex                   
## 1st   Male             0   5
##       Female           0   1
## 3rd   Male            35  13
##       Female          17  14

但是,我不喜欢这种方法,因为如果您不小心,整体布局有时会发生变化。将其与以下内容进行比较,后者删除了仅对子项进行子集化的要求,并添加了仅对未生存的子集进行子集化的要求:

ftable(as.table(mytable)[c("1st", "3rd"), , , "No"])
##              Age Child Adult
## Class Sex                   
## 1st   Male           0   118
##       Female         0     4
## 3rd   Male          35   387
##       Female        17    89

我不喜欢行和列的整体布局发生了变化。这是必须记住使用的经典案例drop = FALSE在提取单个列时保持维度:

ftable(as.table(mytable)[c("1st", "3rd"), , , "No", drop = FALSE])
##                    Survived  No
## Class Sex    Age               
## 1st   Male   Child            0
##              Adult          118
##       Female Child            0
##              Adult            4
## 3rd   Male   Child           35
##              Adult          387
##       Female Child           17
##              Adult           89

我知道有many获取我想要的数据的方法,从原始数据的子集开始,然后使我的ftable,但对于这个问题,我们假设这是不可能的。

最终目标是有一种方法可以让我从ftable保留嵌套“行”层次结构的显示格式。

还有其他解决方案吗?我们可以利用row.vars and col.vars从属性中提取数据ftable并保留其格式?


我当前的方法也不适用于分层列,因此我希望提议的解决方案也可以处理这些情况。

Example:

tab2 <- ftable(Titanic, row.vars = 1:2, col.vars = 3:4)
tab2
##              Age      Child     Adult    
##              Survived    No Yes    No Yes
## Class Sex                                
## 1st   Male                0   5   118  57
##       Female              0   1     4 140
## 2nd   Male                0  11   154  14
##       Female              0  13    13  80
## 3rd   Male               35  13   387  75
##       Female             17  14    89  76
## Crew  Male                0   0   670 192
##       Female              0   0     3  20

请注意“Age”和“Survived”的嵌套。

尝试我目前的方法:

ftable(as.table(tab2)[c("1st", "3rd"), , , , drop = FALSE])
##                    Survived  No Yes
## Class Sex    Age                   
## 1st   Male   Child            0   5
##              Adult          118  57
##       Female Child            0   1
##              Adult            4 140
## 3rd   Male   Child           35  13
##              Adult          387  75
##       Female Child           17  14
##              Adult           89  76

我可以通过以下方式回到我想要的:

ftable(as.table(tab2)[c("1st", "3rd"), , , , drop = FALSE], row.vars = 1:2, col.vars = 3:4)

但我希望有更直接的东西。


这是我能够一起破解的内容,一些帮助 https://chat.stackoverflow.com/transcript/message/40590105#40590105 from Axeman https://stackoverflow.com/users/4341440/axeman:

replace_empty_arguments <- function(a) {
  empty_symbols <- vapply(a, function(x) {
    is.symbol(x) && identical("", as.character(x)), 0)
  } 
  a[!!empty_symbols] <- 0
  lapply(a, eval)
}

`[.ftable` <- function (inftable, ...) {
  if (!class(inftable) %in% "ftable") stop("input is not an ftable")
  tblatr <- attributes(inftable)[c("row.vars", "col.vars")]
  valslist <- replace_empty_arguments(as.list(match.call()[-(1:2)]))
  x <- sapply(valslist, function(x) identical(x, 0))
  TAB <- as.table(inftable)
  valslist[x] <- dimnames(TAB)[x]
  temp <- as.matrix(expand.grid(valslist))
  out <- ftable(
    `dimnames<-`(`dim<-`(TAB[temp], lengths(valslist)), valslist),
    row.vars = seq_along(tblatr[["row.vars"]]),
    col.vars = seq_along(tblatr[["col.vars"]]) + length(tblatr[["row.vars"]]))
  names(attributes(out)[["row.vars"]]) <- names(tblatr[["row.vars"]])
  names(attributes(out)[["col.vars"]]) <- names(tblatr[["col.vars"]])
  out
}

尝试使用问题中的示例:

mytable[c("1st", "3rd"), , "Child", ]
##                    Survived No Yes
## Class Sex    Age                  
## 1st   Male   Child           0   5
##       Female Child           0   1
## 3rd   Male   Child          35  13
##       Female Child          17  14

mytable[c("1st", "3rd"), , , "No"]
##                    Survived  No
## Class Sex    Age               
## 1st   Male   Child            0
##              Adult          118
##       Female Child            0
##              Adult            4
## 3rd   Male   Child           35
##              Adult          387
##       Female Child           17
##              Adult           89

tab2[c("1st", "3rd"), , , ]
##              Age      Child     Adult    
##              Survived    No Yes    No Yes
## Class Sex                                
## 1st   Male                0   5   118  57
##       Female              0   1     4 140
## 3rd   Male               35  13   387  75
##       Female             17  14    89  76
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用“ftable”的属性来提取数据 的相关文章

  • 为什么 ggplot2 图例不结合手动填充和缩放值?

    预期行为 如果我用 ggplot2 创建一个绘图并使用单独的形状和填充比例来描绘数据 我希望图例会在 白色 填充点 看起来是空心的 和 黑色 填充点 看起来不空洞的 在下面的示例代码中 Windows 的图例项应为白色空心点 Linux 的
  • 将值添加到 R 中 for 循环内的向量

    我刚刚开始学习 R 我编写了这段代码来学习函数和循环 squared lt function x m lt c for i in 1 x y lt i i c m y return m squared 5 NULL 为什么这个返回NULL
  • 在闪亮仪表板中显示/隐藏菜单项

    当进入应用程序时 我需要隐藏一个菜单项 当用户选择某个值时 菜单项必须出现 我努力了shinyjs功能hidden 并且它隐藏了一个 menuItem 但是当使用show or toggle 菜单项不会出现 我发现了Rshinydashbo
  • glmnet R 包中的 cv.glmnet 出现“drop(y %*% rep(1, nc)) 错误”错误

    我有一个返回 cv glmnet 模型的 auc 值的函数 尽管不是大多数时间 但在执行 cv glmnet 函数时 它经常返回以下错误 下降误差 y 代表 1 NC 在为函数 drop 选择方法时评估参数 x 时出错 y 中的错误 rep
  • data.frame 按列分组[重复]

    这个问题在这里已经有答案了 我有一个数据框 DF 说 DF 是 A B 1 1 2 2 1 3 3 2 3 4 3 5 5 3 6 现在我想将 A 列的行组合在一起 并得到 B 列的总和 例如 A B 1 1 5 2 2 3 3 3 11
  • 删除 R 中的胡须和异常值

    我有连续的数据 我想用它来绘制R s plotly with a box or violin没有异常值和胡须的绘图 set seed 1 df lt data frame group c rep g1 500 rep g2 700 rep
  • 将 R 传单地图保存为 html:不包括图块

    我正在尝试使用 saveWidget 或将 rmd 文件输出到 html 来保存 R 传单地图 如下所述 将传单输出保存为 html https stackoverflow com questions 30110377 saving lea
  • Rblpapi - 将 bdp 与 ISIN / Cusip 一起使用会出现错误

    当我将 bdp 与 ISIN 或 CUSIP 一起使用时 出现以下错误 bdp US25470XAB10 ISIN ULT PARENT TICKER EXCHANGE bdp 25470XAB1 CUSIP ULT PARENT TICK
  • 如何在shell脚本中运行R代码?

    我有一个 R 文件 myfile R 我想使用 shell 脚本来运行它 我怎样才能做到这一点 我试过这个 bin bash Rscript myfile R 但它给了我这个错误 Rscript 找不到命令 我也尝试过这个 bin bash
  • R 中整数向量的大小

    我原以为 R 有一个用于存储对象的标准开销 看起来是 24 字节 至少对于整数向量而言 但一个简单的测试表明它比我意识到的要复杂 例如 采用长度为 100 的整数向量 使用随机采样 希望避免任何可能存在的偷偷摸摸的序列压缩技巧 https
  • 在 R 绘图上使用鼠标书写?

    我使用创建了散点图plot R 中的函数 有没有可能在这个图上画图 我想添加一条直线并获取它的参数 但在我看来abline 可能会很不方便 我想画很多条线 然后选择一条最合适的 我怎样才能完成这个任务 看看 RStudio 和这个例子 li
  • 如何连接 R 列表中的多个 .wav 文件?

    我有一个 wav 文件列表my list library seewave library tuneR data tico audio lt tico freq lt 22050 breaks lt c 0 0 2 0 4 0 6 0 8 i
  • 如何在 R 中使用 msgbox [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在中显示消息框R 我正在寻找类似的东西msgbox在 VBA 中 因此我可以向用户发出有关问题的警报 此外 我想允许一些用户交互 例如
  • 将一个大的 xlsx 文件导入到 R 中?

    我想知道是否有人知道从 大 xlsx 文件 20Mb 导入数据的方法 我尝试使用 xlsx 和 XLConnect 库 不幸的是 两者都使用 rJava 我总是收到相同的错误 gt library XLConnect gt wb lt lo
  • ggplot2:图例中的斜体

    我正在尝试编辑图例中的标签 以便第一个标签 WT 为纯文本 而后续 7 个标签为斜体 我一直在使用element text face c plain rep italic 7 但这导致没有任何标签被转换为斜体 我有点困惑为什么它不起作用 因
  • 在 R 中高效加载稀疏矩阵

    我在将数据有效加载到 R 中的稀疏矩阵格式时遇到问题 这是我当前策略的 不完整 示例 library Matrix a1 Matrix 0 5000 100000 sparse T for i in 1 5000 a1 i idxOfCol
  • 动态显示仪表板页面

    我有一个实用的闪亮应用程序 它使用shinydashboard包裹 新功能需要特定于用户的行为 例如 针对不同的用户名使用不同的数据集 因此我打算 显示登录表单 验证凭据并设置反应值LoggedIn to true如果成功的话 显示实际情况
  • 如何解决 R 估计中的整数溢出错误

    我正在尝试使用估计模型speedglm在 R 中 数据集很大 约 6988 万行和 38 列 行数和列数相乘得到约 27 亿 超出了整数限制 我无法提供数据 但以下示例重现了该问题 library speedglm large exampl
  • 使用 ggplot2 在一张画布上绘制多个图形[重复]

    这个问题在这里已经有答案了 我正在尝试根据此表将两个 ggplot2 图合并为一个图 Type RatingA RatingB 1 One 3 36 2 Two 5 53 3 One 5 57 4 One 7 74 5 Three 4 38
  • 修改x轴刻度标签

    我正在尝试更改由生成的箱线图的 x 轴刻度标签ggplot2 x 轴是一个分类变量 HabFac 我想要的是将其刻度更改为 6 个化学品 A E 下面是我的代码 raw data read table Read data p TT ggpl

随机推荐

  • 用于接受有效主机名、IPv4 或 IPv6 地址的 Java 正则表达式

    有人有一个好的 最好是经过测试的 正则表达式来仅接受有效的 DNS 主机名 IPv4 或 IPv6 地址吗 我明白你可能是forced使用正则表达式 但是 如果可能的话 最好避免使用正则表达式来执行此任务 而使用 Java 库类来进行验证
  • 将对象转换为原始 int

    如何将对象 不是字符串 例如 TreeNode item 转换为原始类型 例如 int 回应您的最后评论 只需仔细检查该对象确实是 Integer 类型 然后使用自动装箱 我假设您的编译器级别为 1 5 Object o getTheVal
  • 使用 image.onload 将多个图像绘制到画布上

    当我尝试在画布上绘制大型二维图像数组时遇到问题 我使用一个单独的程序 获取一个大图像文件 并将其分解为更小的 统一的部分 我使用 2D 数组来表示图像的 网格 理想情况下 当我分配网格中每个元素的 src 时 一旦准备好 该图像就会被绘制到
  • 如何确定 Linux 上是否使用 Java 或 JRuby 运行不同的进程 ID?

    我需要查看给定的进程 ID 是否正在运行 并且它必须在 Java 或 JRuby 中工作 最好是 Ruby 解决方案 它可能取决于 Linux 系统 特别是 Debian 和 或 Ubuntu 我已经有了我要找的PID 只需要看看它当前是否
  • Wolfram Mathematica 中处理大数据文件的方法

    我想知道 Mathematica 中是否存在处理大文件的方法 目前我有一个大约 500Mb 的包含表数据的文件 Import data txt Table 什么是替代方式 Use OpenRead file http reference w
  • 无法使用索引类型 int 为 [CLPlacemark] 类型的值添加下标

    我想检索当前位置 我使用 swift Xcode 7 进行工作 我看了 PLUSIEUR 教程 但每次他们都使用相同的方法 这是我的代码和我的错误 错误 无法使用索引为 CLPlacemark 类型的值添加下标 类型 int import
  • Google Books API - 不断收到错误代码“403”原因:“ipRefererBlocked”

    我用它作为我的请求网址 String isbnUrl https www googleapis com books v1 volumes q isbn isbn key myAPIKEY 谁能告诉我为什么我不断收到这样的回复 error e
  • 从浏览器获取重定向 URL - Android

    这是我的问题 我想从用户那里授权我的应用程序 为此 API 为我提供了 OAuth 2 0 流程 我有一个链接 A 其中包含我的应用程序密钥和重定向链接 eg REDIRECT LINK 链接 A 在浏览器中打开时要求用户提供用户名和密码并
  • Python - 如何在for循环中连接到字符串? [复制]

    这个问题在这里已经有答案了 我需要 在 for 循环中连接到字符串 为了解释一下 我有这个清单 list first second other 在 for 循环中我需要以此结束 endstring firstsecondother 你能给我
  • 使用两个或多个 $(document).ready.. 是否会影响性能?

    我正在做一个网站项目 项目负责人告诉我 保留两个或两个以上是不对的 document ready 对性能有影响吗 我更喜欢保留多个 document ready因为我有很多 jquery 代码 这是划分代码块的好方法 这是一个额外的函数调用
  • Android加速方向

    经过一段时间的搜索 我没有找到任何方法将平移加速度方向与旋转隔离 我正在寻找一种方法来获得加速度方向 而与手机的旋转方式无关 当然也与手机的旋转方式无关 基本上 这将使我能够区分加速 减速和方向改变 我尝试用从以下位置获得的加速度传感器角度
  • 获取页面中 ssrs 报告中的上一条、当前和下一条记录

    我正在创建一个报告 其中在报告上显示上一个 当前和下一个 ID 我们可以通过 Preveious Fields Id Value 获取上一个 id 但是如何获取下一个 id 这里没有水晶报表的功能下一步 字段 ID 值 在苏维埃社会主义共和
  • process.env.NODE_ENV 的 TypeScript 定义?

    是否有一个带有 process 变量的 TypeScript 定义的项目可以使用 process env NODE ENV 到处都找不到 节点 8 的更新 Now env被声明为ProcessEnv in 绝对打字 https github
  • 仍然没有简单的方法将复合表情符号的字符串拆分到数组中吗?

    在 JavaScript 中将字符串拆分为数组有很多好的 和坏的 方法 例如 在 ES6 中 只需使用扩展运算符 let str example 1 let arr str console log arr e x a m p l e 1 当
  • 将 DropDownList 值从一页传输到下一页

    我有 2 个页面 都有 3 个类似的 DropDownList 第一个 DropDownList 需要在选择第二个之前填充 第二个在第三个之前填充 然后填充网格视图 通常 用户将查看一个页面上的数据 单击按钮 然后查看下一页上的数据 通常使
  • Delphi 从 CreateBlobStream ADO 查询加载 TImage

    我一直在尝试使用下面的代码将存储在 varbinary mssql 列中的图像数据加载到 TImage 组件 但它给出了错误 with Query Refresh do Begin close open if RecordCount gt
  • Pandas:什么是 NDFrame 对象(以及什么是非 NDFrame 对象)

    我正在尝试连接两个 DataFrame 并得到一个 TypeError cannot concatenate a non NDFrame object 错误 我一直在环顾四周 有很多人遇到这个错误 大多数时候当他们尝试做一些他们的代码真正做
  • 完全可审计的数据模型的最佳实现?

    我的要求是一个数据模型 其中保留每个对象的每个属性的更改的完整审计跟踪 对象定义也是流动的 新属性可能会随着时间的推移而出现或消失 此审计跟踪将与原始数据库分开存在 因此基于触发器的审计模型将不起作用 在关系数据库中 我可以使用一个大型 A
  • 将sql行转换为列

    我有一张桌子 A B c a1 1 a11 a1 2 a12 a1 3 a13 a2 1 a21 a2 2 a22 a2 3 a23 我想将其转换为 A C1 C2 C3 a1 a11 a12 a13 a2 a21 a22 a23 我怎样才
  • 使用“ftable”的属性来提取数据

    我有时会使用ftable其功能纯粹是为了表示层次类别 然而 有时 当表很大时 我想在使用它之前进一步对表进行子集化 假设我们从以下开始 mytable lt ftable Titanic row vars 1 3 mytable Survi