每行最后一个非 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 解决方案? 的相关文章

  • 更改 ggplot 对象的数据集

    我正在绘制数据的子集ggplot2我想知道我是否会以某种方式使用已包含在ggplot原始数据子集中的对象 举个例子 这是第一个图 代码块 1 require ggplot2 p lt ggplot mtcars aes mpg wt col
  • 在 R 中使用 k-NN 和分类值

    我希望对主要具有分类特征的数据进行分类 为此 欧几里得距离 或任何其他数值假设距离 不适合 我正在寻找 R 的 kNN 实现 其中可以选择不同的距离方法 例如汉明距离 有没有一种方法可以使用常见的 kNN 实现 例如具有不同距离度量函数的
  • 如何在 Windows 上使用 freeType 构建 rgl

    我正在尝试 并且非常失败 建立rgl封装有freeType在 Windows 上 因为事实证明 rgl我通过 Rgui 安装的 Windows 二进制文件不包括freeType支持 我需要它的原因是this https stackoverf
  • 将不规则时间序列拆分为规则月平均值 - R

    为了确定季节性对能源使用的影响 我需要将计费数据库中的能源使用信息与每月温度进行调整 我正在使用一个计费数据集 其中包含不同长度以及开始日期和结束日期的账单 并且我希望获得每个月内每个帐户的月平均值 例如 我有一个计费数据库 具有以下特征
  • 带有 jsessionid 的 R 网络抓取工具

    我正在 R 中测试一些网页抓取脚本 我已经阅读了很多教程 文档并尝试了不同的方法 但到目前为止还没有成功 我试图抓取的网址是this one http www dataescolabrasil inep gov br dataEscolaB
  • 如何从包含 htmlwidget 的 rmarkdown 文件生成 md 文件

    我正在用这个 rmd 创建一个 html 文件 title test author me date r Sys Date output html document r data HairEyeColor rpivotTable rpivot
  • 更改 geom_text 的默认“a”图例以标记字符串本身

    类似于这个问题 https stackoverflow com questions 18337653 remove a from legend when using aesthetics and geom text 我想更改图例中的默认 a
  • 在 expr *之前*执行的任务处理程序

    是否有运行代码的回调before提示输入expr被评价 通过 SO CRAN 和一些谷歌搜索发现了我怀疑的答案 当前的 REPL 实现不可能 如果我错过了类似详细的重复讨论 我深表歉意 我对addTaskCallback 及其函数族 正在阅
  • 如何制作 POSIXct 的空向量

    我想制作一个空向量POSIXct这样我就可以放一个POSIXct in it vec lt vector POSIXct 10 vec vec 1 lt 2014 10 27 18 11 36 PDT vec 那是行不通的 有任何想法吗 由
  • 通过 rpy2 将 numpy 数组传递给 R 时出现不一致数组

    我正在尝试将 numpy 数组传递到 R 中的 GAMLSS 包 import numpy as np import rpy2 robjects as robjects from rpy2 robjects import numpy2ri
  • Python 是否有相当于 R 的sample() 函数?

    我想知道Python是否有相当于sample R 中的函数 The sample https stat ethz ch R manual R devel library base html sample html函数使用带替换或不带替换的方
  • 按字符分隔字段中的变量

    我最近问了这个问题单独的字段内容 https stackoverflow com questions 53309849 separate contents of field并得到了一个非常快速且非常简单的答案 我在 Excel 中可以简单地
  • ggplot2 stat_function,具有针对facet_grid内不同数据子集的计算参数

    我有一个关于如何通过的后续问题fitdistr计算参数为stat function see here https stackoverflow com questions 24949065 multiple stat function on
  • 使用 knit 以编程方式将 R 块中的图像包含在 .md 文档中

    我想以编程方式在我的 Rmd markdown 文档中包含大量图像 就像是 r echo FALSE cat myfile 1 png 将不起作用 因为结果 md输出是 myfile 1 png 我需要去掉代码标签 和领先的 是否有一个选项
  • 使用 mutate_if 和 Replace_na 替换数字列上的 NA

    我想使用某些变体替换数字列中的 NAmutate if and replace na如果可能的话 但无法弄清楚语法 df lt tibble first c a NA b second c NA 2 NA third c 10 NA NA
  • R:连接到 Teradata 时 JDBC() 找不到 Java 驱动程序路径

    我正在尝试通过 RStudio 连接到 Teradata 但由于某种原因 JDBC 函数在识别 Java 驱动程序所在的路径时出现问题 请参阅下面的代码 library RODBC library RJDBC library rJava b
  • rpy2 传递 python 保留关键字参数

    我试图通过 python 使用 r 的密度函数 并且必须将 from to 参数传递给密度函数 然而 由于 from 这个词是Python中的保留关键字 我该如何实现这一点呢 谢谢 这是到目前为止的代码 r density robjects
  • 如何在 R闪亮中使操作不间断

    在我闪亮的应用程序中 我有一个应该不断更新自身的输出 但是每当我执行长时间运行的计算时 输出就会暂停 我的问题是 如何让输出持续不间断地运行 请参阅下面的简短演示 时钟每一秒刷新一次 但如果我单击运行 5 秒的按钮 时钟就会暂停 libra
  • 为什么for循环只显示最后一个循环的结果

    我有这个样本矩阵 X1 X2 X3 X4 1 F F F F 2 C C C C 3 D D D D 4 A A A A 我正在尝试使用 for 循环来获取每列中唯一音高的数量 我正在尝试这样做 y lt read csv file fra
  • 使用 cbind 的 for 循环中的动态列名称

    我正在尝试这样的循环 我想动态分配矩阵列的名称 for i in 1 nclass P lt eXb SeXb mydata chid mydata lt cbind mydata paste l i sep P 有什么想法 除了事后更改

随机推荐

  • 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 中 每列对应一个调查问题 并且我保留了原始列顺序 以与调查中问题的顺序相对应 用通俗易懂的语言描述问题 由于参与者的正常流失 并非所有参与者