每行最后一个非 NA 行的列名称;使用 tidyverse 解决方案?

2023-11-29

数据集简要描述:我有从 Qualtrics 生成的调查数据,我已将其作为 tibble 导入到 R 中。每列对应一个调查问题,并且我保留了原始列顺序(以与调查中问题的顺序相对应)。

用通俗易懂的语言描述问题:由于参与者的正常流失,并非所有参与者都完成了调查中的所有问题。我想知道每个参与者在调查中进行了多少,以及他们在停止之前回答的最后一个问题。

R中的问题陈述:我想生成(使用 tidyverse):

  • 1)新列(lastq)列出了每一行(即每个参与者)最后一个非 NA 列的名称(即他们完成的最后一个问题的名称)。
  • 2)第二个新列,列出了列的编号lastq

示例数据帧 df

df <- tibble(
  year = c(2015, 2015, 2016, 2016),
  grade = c(1, NA, 1, NA),
  height = c("short", "tall", NA, NA),
  gender = c(NA, "m", NA, "f")
 )

原始df

  # A tibble: 4 x 4
   year grade height gender
  <dbl> <dbl>  <chr>  <chr>
1  2015     1  short   <NA>
2  2015    NA   tall      m
3  2016     1   <NA>   <NA>
4  2016    NA   <NA>      f

期望的最终 df

   # A tibble: 4 x 6
   year grade height gender  lastq lastqnum
  <dbl> <dbl>  <chr>  <chr>  <chr>    <dbl>
1  2015     1  short   <NA> height        3
2  2015    NA   tall      m gender        4
3  2016     1   <NA>   <NA>  grade        2
4  2016    NA   <NA>      f gender        4

还有其他一些相关问题,但我似乎找不到任何专注于提取列名称(与列名称)的答案。价值观本身)基于混合变量类的 tibble(与全数字),使用 tidyverse 解决方案

我一直在尝试 - 我知道我在这里缺少一些东西......:

  • ds %>% map(which(!is.na(.)))
  • ds %>% map(tail(!is.na(.), 2))
  • ds %>% rowwise() %>% mutate(last = which(!is.na(ds)))

?


非常感谢你的帮助!


遵循 James 的建议,编写一个解决问题的函数,但要更健壮一点(处理所有答案均为 NA 的情况)

f0 = function(df) {
    idx = ifelse(is.na(df), 0L, col(df))
    apply(idx, 1, max)
}

The L使 0 成为整数,而不是数字。为了提高速度(当有很多行时),请使用matrixStats包

f1 = function(df) {
    idx = ifelse(is.na(df), 0L, col(df))
    matrixStats::rowMaxs(idx, na.rm=TRUE)
}

按照 markus 的建议在 dplyr 上下文中使用它

mutate(df, lastqnum = f1(df), lastq = c(NA, names(df))[lastqnum + 1])
df %>% mutate(lastqnum = f1(.), lastq = c(NA, names(.))[lastqnum + 1])

或者只是这样做

lastqnum = f1(df)
cbind(df, lastq=c(NA, names(df))[lastqnum + 1], lastqnum)

接受后编辑我想整洁的方法首先是将数据整理成长形式

df1 = cbind(gather(df), id = as.vector(row(df)), event = as.vector(col(df)))

然后进行分组和总结

group_by(df1, id) %>%
    summarize(lastq = tail(event[!is.na(value)], 1), lastqname = key[lastq])

当没有答案时,这不能处理这种情况。

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

每行最后一个非 NA 行的列名称;使用 tidyverse 解决方案? 的相关文章

  • R中添加水印

    我在用magickR中的库 我想在一些图片上添加水印 I used image annotate功能如下 img lt image read C Users Maydin Desktop manzara png image annotate
  • 使用 R Shiny 从 XLConnect 下载 Excel 文件

    有没有人尝试过使用 R Shiny 中的下载处理程序通过 XLConnect 下载新创建的 Excel 文件 在 ui R 中有一行不起眼的行 downloadButton downloadData Download 在 server R
  • 替换列表列表中的元素

    The applyR 中的函数是简化 for 循环以获得输出的好方法 是否有一个等效的函数可以帮助人们在替换向量的值时避免 for 循环 通过示例可以更好地理解这一点 Take this list for example x list li
  • ggplot2可以在一个图例中分别控制点大小和线大小(线宽)吗?

    一个使用的例子ggplot2绘制数据点组和连接每组均值的线 并使用相同的映射aes for shape并为linetype p lt ggplot mtcars aes gear mpg shape factor cyl linetype
  • 是否可以通过扫描从控制台读取而不回显字符?

    这是一个示例函数 passwordEntry lt function cat Enter your password pwd lt scan n 1 what character quiet TRUE invisible pwd 并测试该功
  • 如何在for循环中引用变量?

    我正在循环访问不同的 data tables 和 data table 中的变量 但我在引用内部变量时遇到问题for loop dt1 lt data table a1 c 1 2 3 a2 c 4 5 2 dt2 lt data tabl
  • 如何从 R 运行带有特定模块的 perl 脚本?

    我可以从终端运行 perl 脚本 myperlscript pl 没有任何问题 但是 如果我尝试从 RStudio 中运行相同的 perl 脚本 则会出现以下错误 command lt myperlscript pl outputfile
  • 在shiny中过滤传单地图数据

    我在用传单地图设置这个闪亮的东西时遇到了麻烦 我的原帖 https stackoverflow com questions 50111566 applying leaflet map bounds to filter data within
  • 我无法下载 R 中的 reshape2 包 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试安装 R 包时收到此响应 gt installed packages reshape2 Package LibPath V
  • 正则表达式字符串中第一个和最后一个非点的位置

    我希望找到字符串的第一个和最后一个非点元素的位置 理想情况下我想这样做regex在基地R 我已经写过R解决问题的代码 不过 我对一个感兴趣regex解决方案 感谢您的任何建议 这是一个示例数据集和R代码以获得所需的结果 此代码拆分字符串并使
  • R - Plm 和 lm - 固定效应

    我有一个平衡面板数据集 df 本质上由三个变量组成 A B and Y 对于一堆独特识别的区域来说 它会随着时间的推移而变化 我想运行一个回归 其中包括区域 下面等式中的区域 和时间 年份 固定效应 如果我没记错的话 我可以通过不同的方式来
  • 使用 purrr 迭代替换数据帧列中的字符串

    我想用purrr使用以下命令在数据框列上迭代运行多个字符串替换gsub 功能 这是示例数据框 df lt data frame Year 2019 Text c rep a aa 5 rep a bb 3 rep a cc 2 gt df
  • 多功能测试仪替代 system.time

    我已经看到 我认为是这样 使用了类似于 system time 的函数 它可以同时评估多个函数的时间并输出一个输出 我不记得它是什么 并且用我正在使用的术语进行互联网搜索并没有得到我想要的响应 有人知道我正在谈论的功能的名称 位置吗 你想要
  • 绘制点之间的所有线

    我有以下 R 代码 x lt c 0 01848598 0 08052353 0 06741172 0 11652034 y lt c 0 4177541 0 4042247 0 3964025 0 4074685 d lt data fr
  • 尝试读取 CSV 文件时出现“无法识别的字符串转义”

    我正在尝试导入一个 csv文件 以便我可以观看此视频 R ggplot2 图形直方图 http www youtube com watch v 47kWynt3b6M 我安装了所有正确的软件包 包括ggplot以及相关的包 视频中的第一个说
  • 从命令行运行 R 代码 (Windows)

    我在名为 analysis r 的文件中有一些 R 代码 我希望能够从命令行 CMD 运行该文件中的代码 而无需通过 R 终端 并且我还希望能够传递参数并在我的代码中使用这些参数 例如就像下面的伪代码 C gt execute r scri
  • API 请求和curl::curl_fetch_memory(url, handle = handle) 中的错误:SSL 证书问题:证书已过期

    几天前 我运行了代码几个月 没有任何问题 GET url myurl query 今天我遇到一个错误 Error in curl curl fetch memory url handle handle SSL certificate pro
  • 在 R 格子包中微调点图

    我正在尝试为不同的数据集和不同的算法绘制一堆 ROC 区域 我有三个变量 方案 指定所使用的算法 数据集 是正在测试算法的数据集 以及 Area under ROC 我正在 R 中使用lattice库 命令如下 点图 方案 Area und
  • 在 R 中使用 lapply 绘制多个数据帧

    我正在尝试使用 lapply 函数绘制多个数据帧 每个数据帧一个图 但是尽管有关此主题的所有帖子我都找不到答案 因为我不断收到错误 图的输出列表为空 我的数据结构如下 df1 lt mtcars gt group by cyl gt tal
  • 朴素贝叶斯分类器仅基于先验概率做出决策

    我试图根据推文的情绪将推文分为三类 买入 持有 卖出 我正在使用 R 和包 e1071 我有两个数据框 一个训练集和一组需要预测情绪的新推文 训练集数据框 text sentiment this stock is a good buy Bu

随机推荐

  • substr() 未按预期工作

    我只是想提取日期year month and day分开 以便我可以按照我的意愿使用它 我将当前日期存储在 today并使用substr 从中提取字符串 但我从我所做的事情中得到了一些奇怪的行为 我当前的代码 today date Y m
  • iOS 自定义导航栏后退按钮标题在点击时消失

    你好 StackOverflow 社区 我有一个相当奇怪的情况 导航控制器的导航栏上的自定义后退按钮在交互时消失 一些附加信息是我的代码没有使用 Storyboard 而是使用 UIKit 包括 UI 在内的所有内容都是以编程方式构建的 这
  • 如何在另一种方法中使用一种方法的“返回”值

    我目前正在开发这个玩高低骰子游戏的项目 我被困在如何使用返回的char from getHighLow和返回的int from getBet and getRoll in determineWinnings 这是我目前学习 Java 的第一
  • 如何在软件中模拟浮点运算? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 当CPU没有 或有问题 浮点单元时 软件如何执行浮点运算 例如 PIC AVR 和 8051 微控制器架构 效仿 在 PIC AVR 和 8051 上下文中 浮点 是错误的术语
  • 确保字符串文字联合属于对象的键

    export type A a b c const obj a 4 b 5 c 6 d 7 我如何确保所有元素A是对象的键obj 根据您的需要 您可以自动构造您的类型 所有键作为一个类型 您可以使用keyof将所有密钥作为一个联合体 自从k
  • 如何根据 Javascript 中的多个键对对象数组进行分组?

    我的数组如下 WarehouseId 1 ShippingCarrierId 1 PostalCodeType ShipToCustomer TimeStart 1970 01 01T06 00 00 000Z TimeEnd 1970 0
  • 使用 jQuery AJAX 发送带有二进制数据的 FormData

    我想发送一个FormData通过使用 jQuery AJAX 例如 var uploadFormData new FormData uploadFormData append name value ajax url URL target t
  • 当我返回时,控制到达非空函数的末尾[重复]

    这个问题在这里已经有答案了 我有一个函数 它递归地调用自身 直到连接到服务器 然后函数返回0 为什么我有这样的错误行为 控制到达非空函数的末尾 指向函数结束的行 我做错了什么 我有 if else 语句 仅在 else 中返回 但即使在 i
  • 为什么 Rust 允许在一个作用域中两次声明相同的变量名? [复制]

    这个问题在这里已经有答案了 我第一次遇到允许在同一范围内声明变量名称两次的类型化语言 难道不会有机会错误地覆盖现有变量吗 它带来什么优势 有书中有一章介绍了这一点 隐藏与将变量标记为 mut 不同 因为如果我们不小心尝试在不使用 let 关
  • 从公共方法调用私有方法?

    我定义了一个这样的类 function Class1 this Func1 function Methods and vars function Func2 Methods and vars 我想找到一种从私有方法 Func2 调用公共方法
  • 在 vbscript 中使用 HTA

    在使用 VBscript 的 HTA 用户窗体时 我发现 HTA 不支持 WScript 及其对象 方法 是否有其他创建用户表单的方法 或者有什么方法可以使 HTA 支持 WScript 替代方案WScript Echo就是简单地将内容添加
  • 如何在 Openmodelica 中指定介质?

    我正在 Modelica 中模拟热泵热水系统 我附上了我的模特的照片 但是 当我运行模型时 出现错误 Medium 是部分的 部分类中不允许进行名称查找 您能告诉我吗 我该如何指定水箱 热泵冷凝器和管道中的水 我应该如何指定热泵蒸发器中的空
  • 使用包含通配符条件的数组时出现问题

    我一直在尝试运行 powershell 代码将文件分成 2 个 我有几个常规数组 效果很好 第三个数组包含每个条件的通配符 但这根本不起作用 我尝试过 in notin like notlike contains notcontains m
  • 如何最大程度地划分集合?

    我正在尝试解决欧拉计划问题之一 因此 我需要一种算法来帮助我以任意顺序找到集合中所有可能的分区 例如 给定集合2 3 3 5 2 3 3 5 2 3 3 5 2 3 3 5 2 3 3 5 2 5 3 3 等等 几乎该组成员的所有可能组合
  • MPMoviePlayer 控制风格

    我想使用以下代码隐藏 MPMoviePlayer 中的控件 IBAction video id sender NSBundle bundle NSBundle mainBundle NSString moviePath bundle pat
  • 如何在宏中获取当前命名空间的字符串

    我需要在宏中添加名称空间前缀 IE define MYMACRO x x namespace A namespace B MYMACRO C 并且 MYMACRO 必须返回 A B C 无法工作 命名空间由编译器识别 编译器仅在预处理器之后
  • 设置图像属性时,UIImageView 图像不会明显更新

    我有一个 UIImageView 其用户交互是真实的 并且我为其提供了点击手势识别器 其操作处理程序如下 IBAction func tap sender UITapGestureRecognizer let iv sender view
  • 如何使用 browsermob-proxy 修复“地址已在使用中”错误?

    我还在尝试使用browsermob proxy here 尝试在 python selenium 测试期间监控网络流量 请参阅browsermob代理 我正在使用以下脚本来测试它 from browsermobproxy import Se
  • 如何解码众多 Decodable Swift 中的单个异常属性?

    我有一个符合 Decodable 的结构 它有 50 个 String 属性 只有 1 个 Bool 属性 该布尔值来自服务器 如字符串 false true 或有时如整数 0 1 因此无法从框中解码 我怎样才能让它解码而不是对所有 50
  • 每行最后一个非 NA 行的列名称;使用 tidyverse 解决方案?

    数据集简要描述 我有从 Qualtrics 生成的调查数据 我已将其作为 tibble 导入到 R 中 每列对应一个调查问题 并且我保留了原始列顺序 以与调查中问题的顺序相对应 用通俗易懂的语言描述问题 由于参与者的正常流失 并非所有参与者