如何将 单元格重新编码为 tibble 列表列中的嵌套 NA ()?

2023-12-27

在带有列表列的小标题中,我如何替换<NULL>带有嵌套的条目NA(这将采用嵌套形式<lgl [1]>)?

library(tibble)

tbl_with_null <-
  tibble(letter =  letters[1:10],
       value_1 = list(1, 2, 4, data.frame(a = 1, 2, 3), NULL, 6, 7, c(8, 11, 25), NULL, 10),
       value_2 = list("A", "B", "C", "D", NULL, NULL, NULL, list("H", "B", list(data.frame(id = 1:3))), "I", "J"))

> tbl_with_null
 
## # A tibble: 10 x 3
##    letter value_1          value_2   
##    <chr>  <list>           <list>    
##  1 a      <dbl [1]>        <chr [1]> 
##  2 b      <dbl [1]>        <chr [1]> 
##  3 c      <dbl [1]>        <chr [1]> 
##  4 d      <df[,3] [1 x 3]> <chr [1]> 
##  5 e      <NULL>           <NULL>    
##  6 f      <dbl [1]>        <NULL>    
##  7 g      <dbl [1]>        <NULL>    
##  8 h      <dbl [3]>        <list [3]>
##  9 i      <NULL>           <chr [1]> 
## 10 j      <dbl [1]>        <chr [1]> 

有没有办法对整个tbl_with_null取代<NULL> with NA to get:

## # A tibble: 10 x 3
##    letter value_1                 value_2   
##    <chr>  <list>                  <list>    
##  1 a      <dbl [1]>               <chr [1]> 
##  2 b      <dbl [1]>               <chr [1]> 
##  3 c      <dbl [1]>               <chr [1]> 
##  4 d      <df[,3] [1 x 3]>        <chr [1]> 
##  5 e      <lgl [1]> <- NA         <lgl [1]>  # <- NA
##  6 f      <dbl [1]>               <lgl [1]>  # <- NA
##  7 g      <dbl [1]>               <lgl [1]>  # <- NA
##  8 h      <dbl [3]>               <list [3]>
##  9 i      <lgl [1]> <- NA         <chr [1]> 
## 10 j      <dbl [1]>               <chr [1]> 

UPDATE


我取得了一些进展这个解决方案 https://community.rstudio.com/t/recode-values-of-a-list-column/1570/4?u=emman:

tbl_with_null %>%
  mutate(across(c(value_1, value_2), ~replace(., !lengths(.), list(NA))))

## # A tibble: 10 x 3
##    letter value_1          value_2   
##    <chr>  <list>           <list>    
##  1 a      <dbl [1]>        <chr [1]> 
##  2 b      <dbl [1]>        <chr [1]> 
##  3 c      <dbl [1]>        <chr [1]> 
##  4 d      <df[,3] [1 x 3]> <chr [1]> 
##  5 e      <lgl [1]>        <lgl [1]> 
##  6 f      <dbl [1]>        <lgl [1]> 
##  7 g      <dbl [1]>        <lgl [1]> 
##  8 h      <dbl [3]>        <list [3]>
##  9 i      <lgl [1]>        <chr [1]> 
## 10 j      <dbl [1]>        <chr [1]> 

However,这是不够的,因为我正在寻找一个解决方案blindly代替NULL with NA跨越整个数据框。如果我们一起去mutate(across(everything(), ~replace(., !lengths(.), list(NA))))我们知道letters列也变成了列表列,这是无意的。

## # A tibble: 10 x 3
##    letter    value_1          value_2   
##    <list>    <list>           <list>    
##  1 <chr [1]> <dbl [1]>        <chr [1]> 
##  2 <chr [1]> <dbl [1]>        <chr [1]> 
##  3 <chr [1]> <dbl [1]>        <chr [1]> 
##  4 <chr [1]> <df[,3] [1 x 3]> <chr [1]> 
##  5 <chr [1]> <lgl [1]>        <lgl [1]> 
##  6 <chr [1]> <dbl [1]>        <lgl [1]> 
##  7 <chr [1]> <dbl [1]>        <lgl [1]> 
##  8 <chr [1]> <dbl [3]>        <list [3]>
##  9 <chr [1]> <lgl [1]>        <chr [1]> 
## 10 <chr [1]> <dbl [1]>        <chr [1]> 

UPDATE 2


我以为我已经完成了

mutate(across(everything(), ~simplify(replace(., !lengths(.), list(NA)))))

但不幸的是,这在某些情况下会失败,例如以下数据:

tbl_with_no_null <-
  tbl_with_null %>%
  slice(8) %>%
  select(letter, value_1)

## # A tibble: 1 x 2
##   letter value_1  
##   <chr>  <list>   
## 1 h      <dbl [3]>

当我期待的时候

tbl_with_no_null %>%
  mutate(across(everything(), ~simplify(replace(., !lengths(.), list(NA)))))

会返回同样的结果tbl_with_no_null(因为没有<NULL>取代):

## # A tibble: 1 x 2
##   letter value_1  
##   <chr>  <list>   
## 1 h      <dbl [3]>

但我却得到了错误:

Error: Problem with `mutate()` input `..1`.
x Input `..1` can't be recycled to size 1.
i Input `..1` is `(function (.cols = everything(), .fns = NULL, ..., .names = NULL) ...`.
i Input `..1` must be size 1, not 3.

底线

我正在寻找一种替代方法<NULL> with NA在列表列中,当然,如果没有<NULL>替换,然后按原样返回输入。


base::rapply不递归通过NULL,但你可以使用rrapply这允许这样做,并且非常有效:

library(rrapply)
rrapply::rrapply(tbl_with_null, function(x) NA, how = "replace", condition = is.null)

# A tibble: 10 x 3
   letter value_1          value_2   
   <chr>  <list>           <list>    
 1 a      <dbl [1]>        <chr [1]> 
 2 b      <dbl [1]>        <chr [1]> 
 3 c      <dbl [1]>        <chr [1]> 
 4 d      <df[,3] [1 x 3]> <chr [1]> 
 5 e      <lgl [1]>        <lgl [1]> 
 6 f      <dbl [1]>        <lgl [1]> 
 7 g      <dbl [1]>        <lgl [1]> 
 8 h      <dbl [3]>        <list [3]>
 9 i      <lgl [1]>        <chr [1]> 
10 j      <dbl [1]>        <chr [1]> 

或者按照@JorisC 的建议。在评论中,使用class参数在大型列表上似乎快了 25%:

rrapply(tbl_with_null, classes = "NULL", how = "replace", f = function(x) NA)

只是为了好玩:

eval(parse(text=gsub("NULL","NA",capture.output(dput(tbl_with_null)))))

# A tibble: 10 x 3
   letter value_1          value_2   
   <chr>  <list>           <list>    
 1 a      <dbl [1]>        <chr [1]> 
 2 b      <dbl [1]>        <chr [1]> 
 3 c      <dbl [1]>        <chr [1]> 
 4 d      <df[,3] [1 x 3]> <chr [1]> 
 5 e      <lgl [1]>        <lgl [1]> 
 6 f      <dbl [1]>        <lgl [1]> 
 7 g      <dbl [1]>        <lgl [1]> 
 8 h      <dbl [3]>        <list [3]>
 9 i      <lgl [1]>        <chr [1]> 
10 j      <dbl [1]>        <chr [1]> 

fortunes::fortune(106)

# If the answer is parse() you should usually rethink the question.
#   -- Thomas Lumley
#      R-help (February 2005)

速度比较令人惊讶,这是我预料到的parse成为最慢的解决方案:

microbenchmark::microbenchmark(
  rrapply = rrapply::rrapply(tbl_with_null, function(x) NA, how = "replace", condition = is.null),
  parse = eval(parse(text=gsub("NULL","NA",capture.output(dput(tbl_with_null))))),
  dplyr = mutate(tbl_with_null,across(where(is.list), .fns = map_if, .p = is.null, .f = function(x) NA)))
Unit: microseconds
    expr      min       lq       mean    median        uq      max neval cld
 rrapply   25.401   31.801   60.92102   51.2510   58.3010 1053.502   100 a  
   parse  225.001  269.701  327.31600  329.1005  362.4505  687.800   100  b 
   dplyr 2942.501 3207.301 3604.63105 3500.0005 3766.1510 6541.402   100   c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 单元格重新编码为 tibble 列表列中的嵌套 NA ()? 的相关文章

  • 汇总表中各列的字符值比例

    在这种数据框中 df lt data frame w1 c A A B C A w2 c C A A C C w3 c C A B C B 我需要计算所有列中字符值的列内比例 有趣的是 以下代码适用于大型实际数据集 但对上述玩具数据会引发错
  • 按不规则时间间隔对数据进行分组求和(R语言)

    我正在看这里的 stackoverflow 帖子 R 计算一组内的观察次数 https stackoverflow com questions 65366412 r count number of observations within a
  • R 中的龙卷风图

    我正在尝试在 R 中绘制龙卷风图 又名敏感性图 目标是可视化某些变量增加 10 和减少 10 的效果 到目前为止我已经得到这个结果 这是我正在使用的代码 Tornado plot data lt matrix c 0 02 0 02 0 0
  • 如何绘制每条线之间具有特定距离的图形

    实际上 我尝试绘制一个图形 但它将所有列 线 放在一起并显示 因此它不具有代表性 我尝试制作模拟数据并向您展示我如何绘制它 并向您展示我想要的内容 我不知道如何制作像下面所示的示例的数据 但我在这里做了什么 set seed 1 M lt
  • 使用 pkg:sjPlot 函数创建一个生成部分斜体单元格的数据框

    我正在尝试创建一个简单的数据表 其中 Coral taxon 列中的属名称为斜体 而 spp 列中的属名称为斜体 属名后面的部分不大写 我尝试使用 expression 函数对 Coral taxon 的每一行进行编码 但没有成功 sum
  • R中整数类和数字类有什么区别

    我想先说我是一个绝对的编程初学者 所以请原谅这个问题是多么基本 我试图更好地理解 R 中的 原子 类 也许这适用于一般编程中的类 我理解字符 逻辑和复杂数据类之间的区别 但我正在努力寻找数字类和整数类之间的根本区别 假设我有一个简单的向量x
  • 如何在 R 中绘制一列与其余列的关系图

    我有一个数据集 其中 1 是时间 接下来的 14 个是幅度 我想在一张图表上散布所有大小与时间的关系 其中每个不同的列都是网格化的 分层在另一个之上 我想使用原始数据来制作这些图表 并单独制作它们 但只想执行此过程一次 数据集A 唯一的自变
  • 排序因素与水平

    有人能解释一下 R 中 ordered 参数的用途吗 R says ordered逻辑标志来确定级别是否应被视为有序 按给定的顺序 所以如果我有一个名为名称的因素并设置ordered TRUE names lt factor c fred
  • RStudio 如何确定控制台宽度,为什么它似乎总是出错?

    我刚刚发现wid lt options width在 RStudio 中 它似乎是我日常控制台使用中令人烦恼的根源 或者更确切地说 更接近根源 我应该先说一下 我目前使用的是 R 3 2 2 RStudio 0 99 491 Linux M
  • 如何绘制堆积比例图?

    我有一个数据框 x lt data frame id letters 1 3 val0 1 3 val1 4 6 val2 7 9 id val0 val1 val2 1 a 1 4 7 2 b 2 5 8 3 c 3 6 9 我想绘制一个
  • 从 R 中的方差分析 (glm) 中提取残余偏差

    我在 R 中安装了一个 glm 模型并采用了方差分析表 我需要提取 残余偏差 列 但它会产生错误 以下是代码 创建数据 counts lt c 18 17 15 20 10 20 25 13 12 outcome lt gl 3 1 9 t
  • 如何使用 xpath 检查某个对象在网页中是否可见?

    我正在 R 中使用 RSelenium 包来进行网络抓取 有时加载网页后 需要检查某个对象在网页中是否可见 例如 library RSelenium open a browser RSelenium startServer remDr lt
  • 删除字符串末尾的句点和数字

    如何删除尾随句点 后面紧跟一个数字 长度为一位或两位数字 例子 z lt c awe p 56 red 45 ted 5 you 88 tom 我只想删除 45和 5 你只需要一个简单的正则表达式 z new gsub 0 9 z 一些评论
  • 获取函数的命名空间

    我正在开发一个包 我希望在其中向对象添加编辑历史记录 该包允许其他包注册用于编辑对象的函数 我正在寻找一种方法来记录注册用于编辑的函数的包的版本 问题是 给定一个函数 如何从导出的位置获取包 我的想法是调查它的搜索路径 但是search 仅
  • 使用 R 下载压缩数据文件、提取和导入数据

    EZGraphs 在 Twitter 上写道 很多在线 csv 都被压缩了 有没有办法下载 解压缩存档并使用 R 将数据加载到 data frame Rstats 我今天也尝试这样做 但最终只是手动下载 zip 文件 我尝试过类似的东西 f
  • 尝试使用 JRI 将 R 与我的 Java 应用程序集成,但出现错误。谁能解释一下原因和解决办法吗?

    我需要将 Java 与 R 集成来运行一些数学命令并使用 R 的功能进行绘图 以下部分代码给出了错误 public static void main String args HelloRWorld r new HelloRWorld r h
  • R 可以创建带有可单击条形图的条形图图像以插入网页吗?

    我知道如何创建条形图 以及如何将其粘贴在网页上 例如 使用hwriteImage in the 作家包 http www embl de gpau hwriter 我想要的是每个栏都是一个在鼠标悬停时突出显示的区域 并且每个栏在单击时都有不
  • R 中两个时间戳之间的左连接

    我的目标是执行左连接intervals哪里的bike id比赛和created at时间戳在records在 之间start and end in the intervals table gt class records 1 data ta
  • 在R中循环子文件夹

    我正在 R 环境中包含多个子文件夹的文件夹中工作 我想要循环遍历多个子文件夹 然后在每个子文件夹中调用 R 脚本来执行 我想出了下面的代码 但我的代码似乎添加了 到子文件夹列表 我收到错误 文件中的错误 文件名 r 编码 编码 无效的 描述
  • 如何按时间间隔匹配数据帧?

    这是我从数据记录器导入原始数据时经常出现的问题 温度记录仪设置为每十分钟记录一次温度 单独的气体记录仪设置为记录最后十分钟间隔内使用的气体 我想将这两个记录器的数据合并到一个数据框中进行绘图和分析 但时间并不完全一致 我希望每十分钟的时间段

随机推荐

  • 是否可以使用网页中的 SVG 元素来确定 url(#id) 属性的范围?

    在 SVG 中 您可以使用 URL 引用 例如url id 指向网页上的其他 SVG 元素 例如
  • 使用Java解析从wireshark文件中获取的pcap

    我正在努力使用 JAVA 转换从wireshark 获取的 PCAP 文件 而不使用本机或现成的库 我直接将字节转换为字符串只是为了检查其中有意义的部分 然后我尝试将其从十六进制转换为字符串 这没有意义 有java库jNetPcap htt
  • iOS 忽略 enqueueSampleBuffer 因为状态失败

    当我从这里重新启动应用程序时 https github com zweigraf face landmarking ios https github com zweigraf face landmarking ios相机中的图片未出现并且打
  • 命令行解析器缺少子命令和分组?

    我知道这个问题在我寻找答案时已经在这里和其他地方被问过很多次了 然而 它仍然让我困惑为什么命令行解析器库不提供这种常见的使用场景 其中我有一组子命令 每个子命令都有自己的一组必需和可选参数 类似的构造可以在 git svn 中找到 尽管在他
  • 如何在同一个数据库中启动多个应用程序?

    我必须在本地 管理员和客户端 中使用流星应用程序 应用程序运行在不同的端口上3000 and 3003 我想使用两个应用程序应该使用相同的数据库 export MONGO URL mobgodb 127 0 0 1 3001 meteor会
  • 与mysql的累计和

    我有以下查询 set cumulativeSum 0 select cumulativeSum cumulativeSum count distinct ce URL ce IP as uniqueClicks cast ce dt as
  • 使用NextJS Link,如何在客户端传递对象?

    我正在使用一个 Link 组件 并且想要将 JavaScript 对象传递到我要链接到的新页面 看来我可以传递基元 但不能传递对象 也就是说 我想做下面这样的事情 但我得到一个与 sessionData 关联的空字符串 session id
  • 将 div 翻译为里程表

    我一直在尝试使用 React 和 vanilla css 创建一个类似里程表的动画 到目前为止 它正在工作 当数字增加时 translationY向上就像实际的里程表一样 我目前的问题是 当它从 9 变为 0 时 translationY发
  • 编译器警告范围内没有原型定义的函数?

    问题受到评论线程的启发这个答案 https stackoverflow com questions 50399128 functions in c headers 50399252 50399252 众所周知 从 C99 开始 调用未声明的
  • 给定两个时间戳,如何返回“业务分钟”的增量

    为此寻找一个干净的函数 最好是在 Pandas Numpy 中 我目前正在使用 Pandas 的 CustomBusinessHour 和 TimeDelta 函数构建一些混乱的东西 但我认为必须有更好的方法 如果 Pandas 有 Cus
  • Spark中使用Hive数据库

    我是 Spark 新手 尝试使用 HortonWorks Sandbox 在 tpcds 基准表上运行一些查询 http www tpc org tpcds http www tpc org tpcds 在沙箱上通过 shell 或 hiv
  • 为什么 ASP.NET Core 中的线程 ID 会发生变化?

    我使用 Thread 来存储区域设置并将其传递到各层 在我的中间件中 我在当前线程中设置选定的区域设置 如下所示 Thread SetData Thread GetNamedDataSlot SelectedLocale selectedL
  • 在 SearchView 中应用词干提取以从 Firebase 数据库获取数据

    我需要使用以下命令从 Firebase 数据库中获取用户列表SeachView或搜索对话框 我认为词干将最适合我的应用程序 不要求代码 但请告诉我它的算法 为了实现你想要的 你需要执行一个如下所示的查询 DatabaseReference
  • 菱形符号在 UML 类图中表示什么?

    考虑下面两个图 顶部的右端包含一个普通箭头 底部的一个左端包含一个带菱形的箭头 右端包含一个普通箭头 这很棒的书 GoF https rads stackoverflow com amzn click com 0201634988具有这两种
  • 在指定字符后使用正则表达式匹配序列

    初始字符串是 图片 salmon v5 09 14 2011 jpg 我想捕获文本 salmon v5 09 14 2011 jpg 并使用GSkinner 的正则表达式工具 http gskinner com RegExr 我能得到的最接
  • iPhone SDK:UIWebView 阻止图像加载/下载

    如何在 Xcode 中使用 UIWebView 以便在加载页面时不会下载图像 以加快页面加载速度 UIWebView是 WebKit 完整版的一个苍白 可怜的小影子WebView 这很容易 webView shouldStartLoadWi
  • Ruby 中的迄今为止的字符串

    我有很多类似 Mar 31 1999 的字符串值 有没有一种简单的方法可以将此字符串格式转换为 Ruby Date 您可以使用Date parse方法 gt Date parse Mar 31 1999 gt Wed 31 Mar 1999
  • MySQL选择总和大于阈值的记录

    我需要使用单个查询 无存储过程 根据 MySQL 数据库表中列出的文件大小选择记录 记录集应包含文件大小总和等于或超过特定阈值 如果需要 的所有记录 例如 阈值 30 结果返回 3 条记录 文件大小等于 10 10 20 或 10 10 1
  • MySQL 索引和顺序

    这是我一直以来的疑问 据我所知 索引的顺序很重要 所以像这样的索引 first name last name 不等于 last name first name right 如果我只定义第一个索引 是否意味着它只会用于 SELECT FROM
  • 如何将 单元格重新编码为 tibble 列表列中的嵌套 NA ()?

    在带有列表列的小标题中 我如何替换