如何将变量中的列表附加到 R 中数据帧的特定行中的列表?

2024-01-04

我创建了一个 RMarkdown 来检查错误,其输出print指定错误以及需要更正哪些行号的语句(这将检查df以下)。我创建了另一个数据框(df.index在下面的示例中)来跟踪每列需要更正的行(即df)。本质上,我需要添加一个列来存储需要为每列进行更正的行列表df。然后,当我进行更多错误检查时,我需要将其附加到给定行中的列表中df.index并将新列表添加到其他行rows新创建的列summary数据框。

我已经浏览了列表上的数十个 SO 条目,但找不到一个好的答案。这是我尝试过的,我用这个最小的例子来展示。这段代码确实有效,它给了我我想要的输出。然而,它非常冗长,我的项目团队中的其他人可能很难阅读和理解它。

最小的例子

Data

library(dplyr)

# Dataframe that contains the dataset that I'm checking for errors.
df <-
  structure(
    list(
      `1.1.` = c("Andrew", "Max", "Sylvia", NA, "1",
                 NA, NA, "Jason"),
      `1.2.` = c(1, 2, 2, NA, NA, 5, 3, NA),
      `1.3.` = c(
        "cool",
        "amazing",
        "wonderful",
        "okay",
        NA,
        "sweet",
        "chocolate",
        "fine"
      )
    ),
    class = "data.frame",
    row.names = c(NA, -8L)
  )


# Dataframe that contains the column numbers and names, which will be used to create a summary of what rows need to be changed for each column.
df.index <-
  structure(list(
    number = c("1.1.", "1.2.", "1.3."),
    name = c("name",
             "number", "category")
  ),
  class = "data.frame",
  row.names = c(NA, -3L))

我尝试过的

obs <- "1.1."

na.index <- which(is.na(df$`1.1.`))

summary <- df.index %>%
  dplyr::mutate(rows = ifelse(number == obs, list(na.index), NA))

# Check to see if there are any numeric values in this character column. Adding 6 just to have a duplicate for this example.
na.index2 <-
  c(which(!is.na(as.numeric(
    as.character(df$`1.1.`)
  ))), 6)

# Append new list from na.index2 to the existing list in row 1 (or 1.1.), and keep only the unique values, excluding NAs.
summary <- summary %>%
  dplyr::mutate(rows = ifelse(number == obs, list(unique(na.omit(
    unlist(append(rows, list(na.index2)))
  ))), NA))

# Column 1.2. in df.
obs <- "1.2."

na.index3 <- which(df$`1.2.` > 2)

summary <- summary %>%
  dplyr::mutate(rows = ifelse(number == obs, list(na.index3), rows))

na.index4 <- which(df$`1.2.` == 2)

summary <- summary %>%
  dplyr::mutate(rows = ifelse(number == obs, list(unique(na.omit(
    unlist(append(rows[2], list(na.index4)))
  ))), rows))

# Column 1.3. in df.
obs <- "1.3."

na.index5 <- which(df$`1.3.` == "okay")

summary <- summary %>%
  dplyr::mutate(rows = ifelse(number == obs, list(na.index5), rows))

Output(这也是预期的输出)

summary

  number     name       rows
1   1.1.     name 4, 6, 7, 5
2   1.2.   number 6, 7, 2, 3
3   1.3. category          4

我在上面的示例中得到了所有正确的行,但是必须有一种更简单的方法来执行此操作,并且无需创建obs并且必须指定行号(例如,rows[2]) 附加列表时。

正如您所看到的,并非每一列都有相同的错误检查。所以,我希望有一种简单的方法来将列表添加到rows列于summary当我对每个类别进行类似的检查时(例如1.2., 1.3.等),以及能够附加其他列表(如此处所示)。


我们可以循环across'df' 的列,获取索引NA和纯数字元素 (str_detect) in a list,使用“pivot_longer”重塑为“long”格式并与“df.index”数据连接

library(dplyr)
library(stringr)
library(tidyr)
out <-  df %>% 
    summarise(across(everything(), ~ {
       tmp <- df.index$name[match(cur_column(), df.index$number)]
       if(tmp == 'name') list(which(is.na(.)|str_detect(., 
          '^-?[0-9.]+$'))) else if(tmp == "number") 
             list(which(is.na(.)|str_detect(., '\\D'))) else 
          list(which(is.na(.)))})) %>%
    pivot_longer(everything(), names_to = 'number', values_to = 'rows') %>% 
    right_join(df.index) %>%
    select(names(df.index), everything())

-output

> out
# A tibble: 3 x 3
  number name     rows     
  <chr>  <chr>    <list>   
1 1.1.   name     <int [4]>
2 1.2.   number   <int [3]>
3 1.3.   category <int [1]>

> out$rows
[[1]]
[1] 4 5 6 7

[[2]]
[1] 4 5 8

[[3]]
[1] 5

Update

根据更新的检查,只需修改条件else if or else

out <-  df %>% 
    summarise(across(everything(), ~ {
       tmp <- df.index$name[match(cur_column(), df.index$number)]
       if(tmp == 'name') list(which(is.na(.)|str_detect(., 
          '^-?[0-9.]+$'))) else if(tmp == "number") 
             list(which(. >= 2)) else 
          list(which(. %in% 'okay'))})) %>%
    pivot_longer(everything(), names_to = 'number', values_to = 'rows') %>% 
    right_join(df.index) %>%
    select(names(df.index), everything())

-output

> out$rows
[[1]]
[1] 4 5 6 7

[[2]]
[1] 2 3 6 7

[[3]]
[1] 4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将变量中的列表附加到 R 中数据帧的特定行中的列表? 的相关文章

  • 如何在 C# 中将二维数组转换为二维列表

    我有一个二维字符串数组 我想把它转换成 List
  • 没有适用于“filter_”的方法应用于类“c('double', 'numeric')”的对象

    使用下面的代码 我尝试过滤我的数据集 以便仅选择 CG less14 0 和 CG High14 0 的数据集 我收到错误 没有适用于 filter 的方法应用于 c double numeric 类的对象 我的代码有问题吗 married
  • 有没有办法获取 JList 中的所有元素?

    我想知道是否有一种方法可以检索已添加到 JList 的所有元素的列表 例如 我希望 JList 从自定义单元格渲染器返回字符串或 JLabels 的数组或列表 您可以使用getModel http docs oracle com javas
  • 列出树中叶子的路径

    我正在尝试编写一个函数来查找树中叶子的所有路径 例如 给定一棵如下所示的树 1 2 5 3 4 6 输出列表将是 1 2 3 1 2 4 1 5 6 该函数的类型签名是 branches Tree a gt a 请注意 这使用了中定义的 T
  • 映射 2 个数据帧并替换目标数据帧中匹配值的标头

    我有一个数据框 df1 SAP Name SAP Class SAP Sec Avi 5 C Rison 6 A Slesh 7 B San 8 C Sud 7 B df2 Name Fi Class Avi 5 Rison 6 Slesh
  • 合并结果的行数多于一个数据框

    我有两个数据框 第一个包含 9994 行 第二个包含 60431 行 我想合并两个数据框 以便合并后的数据框包含两个数据框的组合列 但只包含 9994 行 但是 合并后我得到了超过 9994 行 我怎样才能确保这种情况不会发生 df1 re
  • 在 ggplot2 中隐藏单个几何图例

    我将相同的变量 颜色 映射到两个不同几何图形中的颜色 我希望它们要么出现在单独的图例中 DHJ 和 EFI 要么最好完全跳过第二个图例 对于 E F 和 I 目前 R 将两者混合在一起 并给我一个图例 其中按字母顺序列出了 DEFHIJ 所
  • 根据值绘制具有条件颜色的折线图

    我想绘制折线图 根据值 它应该改变它的颜色 我发现的是 plot sin seq from 1 to 10 by 0 1 type p col ifelse sin seq from 1 to 10 by 0 1 gt 0 5 red ye
  • R 中带有自定义字段类的参考类?

    我想在另一个引用类中使用自定义引用类 但此代码失败 nameClass lt setRefClass nameClass fields list first character last character methods list ini
  • 使用 R 中的剪切函数对缺失值进行 NA 级别[重复]

    这个问题在这里已经有答案了 R 中的 cut 函数省略了 NA 但我想要一个缺失值的级别 这是我的 MWE set seed 12345 Y lt c rnorm n 50 mean 500 sd 1 NA Y1 lt cut log Y
  • Python pandas:向我的数据框中添加一列来计算变量

    我有一个像这样的数据框 gt org group org1 1 org2 1 org3 2 org4 3 org5 3 org6 3 我想将列 count 添加到 gt 数据帧以计算组的成员数量 预期结果如下 org group count
  • 数据框中的动物园滞后差异

    我想将滞后差异的结果放回到我的数据框中 这意味着我将拥有针对不同滞后的领先 NA 我在用 new df lag1 lt diff new df Close lag 1 differences 1 arithmetic TRUE na pad
  • R 在列中按分隔符分割字符串

    我有一个包含几行的文件 例如 A B C awer ttp net Code 554 abcd ttp net Code 747 asdf ttp net Part 554 xyz ttp net Part 747 我想使用 R 仅拆分表的
  • Shiny:合并 DT::datatable 中的单元格

    我想以闪亮的方式合并 DT datatable 列中的几行 可以这样做吗 目前我能够输出如下所示 但理想情况下 我想合并行并希望输出如下所示的内容 是否可以在 DT datatable 中合并这样的行 在以下人员的帮助下这是可能的数据表行组
  • 使用清单修改 Latex 文档中 R 代码的字体颜色

    我试图在 Latex 文档中突出显示 R 代码 但我似乎无法更改代码框中的字体颜色 举个例子 我认为commentstyle color red 应该给我红色字体的评论 但评论显示为蓝色或黑色 不太清楚 另外 我认为backgroundco
  • 为什么这个“[::-1]”在Python中返回一个反向列表? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 切片表示法的良好入门指南 https stackoverflow com questions 509211 good primer for python slice notation P
  • R - 数据框列中唯一值的数量

    对于数据框df 我需要找到的唯一值some col 尝试了以下方法 length unique df some col 但这并没有给出预期的结果 然而length unique some vector 对向量进行处理并给出预期结果 创建 d
  • R 中的因素:不仅仅是烦恼?

    R 中的基本数据类型之一是因子 根据我的经验 因素基本上是一种痛苦 我从不使用它们 我总是转换为字符 我感觉很奇怪 好像我错过了什么 是否有一些使用因子作为分组变量的函数的重要示例 其中因子数据类型变得必要 当我should使用因素 你应该
  • 缓存 pandas 数据框的最佳方法?

    昨天 我经历了惨痛的教训 将 pandas 数据帧保存到 csv 以供以后使用是一个坏主意 我有一个包含 130k 条推文的数据框 其中数据框的一行是list的推文 当我将数据保存到 CSV 然后重新加载数据帧时 数据帧的行现在是字符串类型
  • 带有预先计算值的 geom_boxplot

    过去 我已经能够使用 ggplot2 创建箱线图 方法是提供下须线 下分位数 中位数 上分位数和上须线以及 x 轴标签 例如 DF lt data frame x c A B min c 1 2 low c 2 3 mid c 3 4 to

随机推荐

  • xamarin应用程序启动缓慢

    我们正在 PCL 上开发一个跨平台应用程序 但目前我们仅使用 Android 设备进行测试 我们担心的是 启动应用程序需要大约 6 到 8 秒 取决于我们测试的设备 这非常慢 设置几个断点后 我们发现时间消耗得相当均匀 我们确实注意到这个特
  • 模态图像库 - 多张图像

    我目前正在尝试根据此处的代码制作一个图片库 http www w3schools com howto howto css modal images asp http www w3schools com howto howto css mod
  • 限制 jQuery UI 中的可拖动区域

    我正在尝试在 div 内创建一个可拖动区域 它工作正常 但我不想要可拖动区域之外的空白区域 因此想要限制可以拖动的区域 到目前为止我想到的是在这个小提琴里 http jsfiddle net kBVFC 图像最初位于父 div 的左上角 如
  • 是否可以?匹配完全相同数量的左大括号和右大括号

    我不是正则表达式专家 我正在尝试创建一个正则表达式来匹配完全相同数量的左大括号和右大括号 但我不知道如何做到这一点 一个例子 nothing important a b c a another nothing or one two erro
  • 如何模板重载一组相关类的运算符而不与标准库运算符冲突?

    这似乎是一个相当简单的想法 我有一组类 我应该能够使用基本上完全相同的代码为其编写一个运算符 比如说减法 当尝试以 明显 的方式做到这一点时 即 template
  • 在Qt中获取MAC ID

    我正在使用以下代码来获取 Qt 中的 MAC ID main cpp include
  • AppBarLayout + TabLayout + CollapsingToolbarLayout + SwipeToRefresh

    我遇到了很多与我的问题相关的问题 但我发现没有人想要我正在寻找的行为 我想要一个带有选项卡和应用程序栏的视图寻呼机 当包含的片段可滚动并滚动 向底部 时 我希望应用程序栏消失 但保留选项卡 当向顶部滚动时重新出现 其中一些片段包含 Swip
  • iOS safari 移动浏览器的 navigator.getUserMedia 替代 API?

    我知道下面的代码将从 ios 6 safari 移动浏览器捕获图像
  • 使用 div 作为提交按钮

    我想在提交按钮中转换由图像 文本 用于翻译 组成的div 是否可以 我设法使用图像作为提交 但文本不是链接 它给整个图像 文本带来了 破碎 的感觉 div div
  • NSJSONSerialization 和 Unicode 不能很好地结合在一起

    我正在制作一个使用套接字和 JSON 与 Nodejs 服务器通信的应用程序 由于 iOS 5 有自己的 NSJSONSerialization 我认为这可能是我要遵循的道路 之前我使用的是轻量级的yail库 无论如何 在迁移到 NSJSO
  • 如何在 sbt shell 中设置子项目的设置(不使用项目命令)?

    在 sbt shell 中如何设置子项目 我知道我可以project subproject then set key value 但我不想一直切换项目 理想情况下 与以下内容没有太大不同 set key in subproject valu
  • 淘汰ViewModel基类,Javascript继承

    我最近在很多项目中使用了 Knockout js 并且编写了很多重复的代码 我希望能够定义一个BaseViewModel类并让我的特定于页面的 ViewModel 继承它 我对 Javascript 如何做到这一点有点困惑 这是我的基本Ba
  • 在用户睡觉时处理我的 BLE 监控应用程序上的 Android-Doze 模式

    我制作了一个在睡眠时间监控人的健康状况的设备 它通过 BLE 连接到智能手机 它与 iOS 应用程序配合得很好 但自从 Android 世界出现 Doze 模式以来 这真的很难处理 因为我的设备在他的睡眠时间工作 主要功能是它可以检测特定的
  • 如何在 Rails 中建模“喜欢”?

    我有 3 个模型 用户 对象 喜欢 目前 我有这样的模型 一个用户有很多对象 我该如何进行建模 1 一个用户可以喜欢很多对象 2 一个对象可以有很多喜欢 来自不同的用户 所以我希望能够做这样的事情 User likes 用户喜欢的对象列表
  • 将 jar 添加到 maven exec:java classpath

    我有一个批处理文件 它使用依赖于tools jar 来自JDK 的maven 运行java 类 例如 mvn f pom xml e exec java Dfile encoding UTF 8 Dexec mainClass MyClas
  • 按元素过滤 XML [重复]

    这个问题在这里已经有答案了
  • omp 的行为对嵌套并行级别至关重要

    考虑以下场景 函数A创建一层OMP并行区域 每个OMP线程调用函数B 函数B本身包含另一层OMP并行区域 那么 如果在函数 B 的并行区域内 存在一个 OMP 临界区域 那么 该区域对于函数 A 和 B 创建的所有线程来说是 全局 临界的
  • istio:VirtualService 重写为根 url

    我有一个 Istio 1 4 6 VirtualService 其匹配项和 url 重写定义如下 match authority prefix example com uri prefix foo bar rewrite uri route
  • (-) MonthBegin 的 Pandas 日期时间锚定偏移量无法按预期工作

    我需要回到月初 但如果我已经在月初 我想留在那里 Pandas 锚定偏移量 n 0 应该正是这样做的 但它不会在 MonthBegin 的锚定点之间产生预期结果 例如对于这个pd Timestamp 2017 01 06 00 00 00
  • 如何将变量中的列表附加到 R 中数据帧的特定行中的列表?

    我创建了一个 RMarkdown 来检查错误 其输出print指定错误以及需要更正哪些行号的语句 这将检查df以下 我创建了另一个数据框 df index在下面的示例中 来跟踪每列需要更正的行 即df 本质上 我需要添加一个列来存储需要为每