在 R 中,找到每行包含字符串的列

2023-12-15

我一定是用了错误的搜索词来思考,因为我不敢相信我的问题是独一无二的,但我只找到了一个类似的问题。

我有一些来自世界银行的相当笨重的数据,它们是代表数据库的平面文件。数据每行一个项目,但每个项目都有多个特征,这些特征方便地位于名称为“SECTOR.1”的列中,而其自己的特征位于名称为“SECTOR.1.PCT”等的其他列中。

由此,我尝试提取与特定类型的部门相关的数据,但我仍然需要拥有所有其他项目信息。

从我在 SO 上发现的另一个问题中,我已经能够朝着正确的方向迈出一些步骤:查找数据框中包含字符串作为值的列的索引

基于上面的问题注释,一个最小的可重现示例如下:

> df <- data.frame(col1 = c(letters[1:4],"c"), 
...                  col2 = 1:5, 
...                  col3 = c("a","c","l","c","l"), 
...                  col4= letters[3:7])
> df
  col1 col2 col3 col4
1    a    1    a    c
2    b    2    c    d
3    c    3    l    e
4    d    4    c    f
5    c    5    l    g

我想要的输出是这样的:

1 col4
2 col3
3 col1
4 col3
5 col1

我知道我可以执行 ifelse,但这似乎不是一个非常优雅的方法。当然,由于这是我只会做一次的事情(对于这个项目),所以拼写错误的风险很小。例如,

> df$hasc <- ifelse(grepl("c",df$col1), "col1",
...                         ifelse(grepl("c",df$col2), "col2",
...                                ifelse(grepl("c",df$col3), "col3",
...                                       ifelse(grepl("c",df$col4), "col4",
...                                              NA))))
> df
  col1 col2 col3 col4 hasc
1    a    1    a    c col4
2    b    2    c    d col3
3    c    3    l    e col1
4    d    4    c    f col3
5    c    5    l    g col1

我认为如果我有某种可以按行查看列的应用函数会更好。上一个问题中的方法不适用于这个问题,因为我需要知道哪一列有“c”。除了列出带有“c”的列名之外,我得到了一些没有意义的东西。我不明白 1,3,4,因为它与行名或计数不对应:

>which(apply(df, 2, function(x) any(grepl("c", x))))
col1 col3 col4 
1    3    4 

而且,如果我尝试按行执行此操作,我确实会看到每行都有一个“c”,正如预期的那样。

 >which(apply(df, 1, function(x) any(grepl("c", x))))
[1] 1 2 3 4 5

另外->我想知道是否有一种方法可以处理这个问题,如果一行中有多个“c”,例如,如果我们有:

> df <- data.frame(col1 = c(letters[1:4],"c"), 
...                  col2 = 1:5, 
...                  col3 = c("a","c","l","c","c"), 
...                  col4= letters[3:7])
> df
  col1 col2 col3 col4
1    a    1    a    c
2    b    2    c    d
3    c    3    l    e
4    d    4    c    f
5    c    5    c    g

我的 ifelse 方法失败了,因为它只为 row5 提供“col1”。


假设数据集“df”的每一行中有一个“c”,我们可以使用max.col获取行元素为“c”的列索引,并使用它来获取匹配的列名称。

df$hasc <- colnames(df)[max.col(df=='c')]
df
#  col1 col2 col3 col4 hasc
#1    a    1    a    c col4
#2    b    2    c    d col3
#3    c    3    l    e col1
#4    d    4    c    f col3
#5    c    5    l    g col1

如果每行有多个“c”,一种选择是循环遍历行并paste多个列名在一起

df$hasc <- apply(df=='c', 1, FUN= function(x) toString(names(x)[x]))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 R 中,找到每行包含字符串的列 的相关文章

  • 将数据框分成相等的部分

    我有一个示例数据框 df lt data frame x 1 112 y runif 112 有没有办法打印数据框列表 其中列表的第一部分包含行1 10 第二11 20等等 直到最后 111 112 你可以使用split with rep
  • R markdown PDF:为测验者暂时隐藏剧透代码

    我正在使用 R markdown 创建 PDF R 课程 我想插入一个如下所示的测验 output pdf document What is the class of the following R object 1 pi r class
  • 将 R 与 Rsruby 集成

    我想知道是否有人有将 R 集成到 Rails 中的经验 特别是在 heroku 上 我熟悉 rsruby gem 它是 ruby 与 R 事实上的 也许是唯一的 绑定 但是有关将 R 与 Rails 集成的文档即使不是不存在 也是很少的 比
  • 根据特定行中的值对列重新排序。

    我在数据框中有以下数据 aa bb cc 1 3 4 5 2 5 4 3 3 7 8 6 100 33 63 55 我需要根据最后一行中的值对列重新排序 这种转变的结果将是 bb cc aa 1 4 5 3 2 4 3 5 3 8 6 7
  • 将其他数据集的点添加到ggplot2

    关于这个主题已经有很多问题 但我找不到能回答我的具体问题的问题 我有一个barplot see testplot1 and testplot3如下 绘制数据集 bardata如下 并希望从另一个数据集向其添加点 pointdata 请参阅简
  • 在 R 中,为什么 sum 与其他方法(例如 cumsum)相比如此慢?

    我正在尝试实现一个需要非常快的函数 主要是因为它一遍又一遍地处理巨大的数据帧 R 总是让我感到困惑 为什么它有时有点慢 而有时又慢得离谱 不幸的是 它从来都不快 不管怎样 我一直认为 如果可能的话 当以某种方式推入 apply sapply
  • dplyr +“meta”-columns:当列包含要使用的其他列的名称而不是数据时

    我想知道以下问题在 dplyr 中是否有一个优雅的解决方案 要提供一个简单的可重现示例 请考虑以下 data frame df lt data frame a 1 5 b 2 6 c 3 7 ref c a a b b c stringsA
  • 使用 ggplot 添加到投影地图时 R 饼图扭曲

    我想使用 ggplot 将饼图绘制到投影地图上 然而 饼图可能由于投影而变得扭曲 有谁知道如何在不变形的情况下绘制饼图 示例代码如下 谢谢 lib c ggplot2 scatterpie lapply lib library charac
  • 收集四列,其中两个键中包含值

    已经提出了类似的问题 但它们都涉及在一个关键列中收集多个列 我需要两个键中的多个列 这是我的数据框 ID measure A 1 measure A 2 measure B 1 measure B 2 1 8 25 23 5 4 5 2 8
  • 将函数应用于矩阵列表

    我有一个矩阵列表 注意 它们的维度与此示例不同 x lt matrix 1 10 ncol 2 y lt x 300 mylist lt list x y 我想运行一个函数networklevel在矩阵列表中的每个矩阵上 该函数有各种可以计
  • 无效的命令名称“tk_chooseDirectory”错误

    我使用 bioconductor 进行 WES 管道 并使用 tk choose dir 选择用户存储输入文件的目录 并将其存储以供进一步使用 这里是命令行 library tcltk dataDir lt dirname tk choos
  • 将文件夹中的多个 csv 文件读取到 R 中的单个数据帧中[重复]

    这个问题在这里已经有答案了 我有一个包含 332 个 csv 文件的文件夹 文件名称如下 001 csv 002 csv 003 csv 330 csv 331 csv 332 csv 所有文件都具有相同数量的变量和相同的格式 我需要读取一
  • 使用 2 个向量参数翻转函数

    我想对需要 2 个向量参数的函数应用滚动 这是使用 data table 的示例 不起作用 library data table df lt as data table cbind data frame x 1 100 y 101 200
  • ggsubplot 是否适用于 R 3.2.1+?

    CRAN 提供的 ggsubplot 版本与 R 的最新版本 例如 3 1 1 不兼容 运行 ggsubplot 示例会返回以下错误 Error in layout base data vars drop drop At least one
  • 根据 R 中的字符串模式选择行

    假设我有以下数据 df lt data frame name c TO for Turnover for people HC people Hello world beenie man apple pears TO is number c
  • 行方向变异的有效方法

    我有两个数据框 dfUsers and purchases使用以下代码生成 set seed 1 library data table dfUsers lt data table user letters 1 5 startDate sam
  • R正则表达式获取第二个下划线之前的所有文本

    s lt 1 343 43Hello 2 323 14 fdh 99H 在 R 中 我想使用正则表达式来获取第二个下划线之前的子字符串 如何使用一个正则表达式来完成此操作 另一种方法是用 分割 然后粘贴前两个 一些东西 paste sapp
  • 跨类别和列自动化卡方

    我有一个调查数据框 其中包含几个问题 列 编码为 1 同意 0 不同意 受访者 行 根据 年龄 年轻 中年 老年 地区 东 中 西 等指标进行分类 大约有30个类别总共 3个年龄 3个地区 2个性别 11个职业等 在每个指标中 类别不重叠且
  • 使用faceting()时如何连接geom_point()和geom_line?

    我有一个问题 但我在互联网上没有找到任何相关信息 我很高兴得到一些提示 我有一个数据集 其中 x 轴是离散的 但我想将这些点相互连接 我可以做到 我的问题是当我添加分面选项时 我无法再将这些点相互链接起来 我找到了一个替代方案 但看起来不太
  • RMySQL fetch - 找不到继承的方法

    使用 RMySQL 我想将数据从数据库加载到 R 中的数据帧中 为此 我使用以下代码 R连接数据库 con lt dbConnect MySQL user root password password dbname prediction h

随机推荐

  • Kotlin 链接来自不同输入流的多个序列?

    假设我想解析这样的大文件 val iStream MyFile class java getResourceAsStream largeFile txt iStream bufferedReader Charsets UTF 8 useLi
  • 在 VB .NET 中生成所有真实组合

    我需要在 VB NET 中生成所有组合 不是排列 我一直在搜索 发现的只是排列 有人说是组合 但当我尝试时 所有都是排列 我需要的是从字符串数组生成组合 Dim data array As String one two three four
  • pyspark数据框过滤或包含基于列表

    我正在尝试使用列表过滤 pyspark 中的数据帧 我想根据列表进行过滤或仅包含列表中具有值的记录 我的下面的代码不起作用 define a dataframe rdd sc parallelize 0 1 0 1 0 2 1 2 1 10
  • 在 JavaScript 中将连字符的名称大写

    我需要在 javascript 中将名称大写 到目前为止我已经找到了这些方法 doesn t capitalize first letter after hyphen gt gives Bj rn martin str replace w
  • 获取大量应用程序图标会导致内存不足

    我创建了一个应用程序来加载所有已安装的应用程序 现在运行良好 但对于一些拥有大量应用程序的手机 平板电脑 我的应用程序会因内存不足而崩溃 以下是获取应用程序信息的源代码 String appName p applicationInfo lo
  • 如何根据cq5中的路径创建目录?

    我有一个字符串 例如页面的路径 content xperia public events eventeditor 我正在生成此页面的 XML 并将其保存到 DAM 但我想将其保存在类似的树结构中 content 我尝试了以下代码 Strin
  • 从集合中随机返回项目

    我有一个从数据库返回通用列表集合 List 的方法 该集合包含订单详细信息 即订单 ID 订单名称 产品详细信息等 此外 该方法返回一个集合 其中仅包含按订单日期降序排序的前 5 个订单 我的要求是 每次客户端调用此方法时 我需要返回有 5
  • 我的变量值与传输时prepareForSegue 取的值不同?

    本质上 我的变量 playerErrors 是通过按下按钮来更新的 然后视图控制器通过数据传输转移到下一个 然而 变量的值 例如 应该从 0 增加 1 传输为 0 就好像按钮没有被按下一样 我的代码中有 16 个变量 我试图传输这些变量 但
  • 模拟框架中的模拟与间谍活动

    在模拟框架中 您可以mock一个物体或spy在上面 两者之间有什么区别 我什么时候会 应该使用其中一种 看着Mockito 例如 我看到类似的事情正在使用spies and mocks 但我不确定两者之间的区别 模拟对象完全替换模拟类 返回
  • 如何在 Ruby 中解析邮箱文件?

    红宝石rmail有方法解析本地磁盘上的邮箱文件 不幸的是这个 gem 已经损坏了 在 Ruby 2 0 0 中 它可能无法修复 因为人们正在迁移到 gemmail Gem mail有方法Mail read filename txt 但这仅解
  • 如何使用正则表达式匹配任意重复字符?

    我需要匹配任何重复两次的字符 例如 abccdeff 应匹配 cc 和 ff 在任何其他正则表达式语法中 让我们使用 Javascript 作为一个快速示例 我可以这样做 var str abccdeff var r a z 1 1 g c
  • 防止 jQuery 缓存破坏在使用“html(...)”函数的 AJAX 回调期间加载的资源

    使用 jQuery 1 7 1 我通过 AJAX 加载一些 HTML 片段 这些片段通过html 方法 HTML内容本身无法被缓存 但它可能会加载一些可以缓存的JavaScript资源 我发现当我禁用缓存时 ajax当 HTML 被注入到
  • 在div的角上画三角形

    我想在 div 的角上画某种三角形 因为我不想使用 px 所以我想用百分比值也获得相同的结果 它应该是这样的 container position absolute top 5 left 5 width 60 height 30 backg
  • 具有多个回调的 Javascript 全局计时器

    我想在 JavaScript 中创建一个全局计时器对象 然后能够动态添加回调 这样我就可以在脚本中使用一个全局计时器以一定的时间间隔执行所有操作 而不是使用多个全局计时器来浪费资源 这就是我希望能够将事情拼凑在一起的方式 var timer
  • 为什么调用 printf 时 EDX 的值会被覆盖?

    我写了一个简单的汇编程序 section data str out db d 10 0 section text extern printf extern exit global main main MOV EDX ESP MOV EAX
  • Websocket - InvalidStateError:连接尚未建立

    我无法将 Angular2 前端与 Spring 的 websocket 后端连接起来 Spring配置xml文件
  • 在python中保存文件时添加BOM(unicode签名)

    如何在 python 中保存文件时添加 BOM unicode 签名 file old open old txt mode r encoding utf 8 file new open new txt mode w encoding utf
  • 防止 RTL TListView 镜像复选框和/或图形

    我试图使 ListView 的列从右到左显示 这已经是问并回答 但问题在于图标和复选框 当我使用 ListView RTL 时SetWindowLong 它也镜像图形和复选框 这是不需要的 我可以使用编辑工具镜像图形 虽然麻烦但可行 但我不
  • 如何用C#实现P2P?

    最近 我想使用c 和Winform开发一个简单的聊天程序 主要功能是聊天和文件传输 但是我找不到使用dotnet实现p2p的示例 谁可以帮助我 查看WCF
  • 在 R 中,找到每行包含字符串的列

    我一定是用了错误的搜索词来思考 因为我不敢相信我的问题是独一无二的 但我只找到了一个类似的问题 我有一些来自世界银行的相当笨重的数据 它们是代表数据库的平面文件 数据每行一个项目 但每个项目都有多个特征 这些特征方便地位于名称为 SECTO