按字符的第 n 个实例拆分数据框中的列

2023-12-30

我有一个包含几列的数据框,其中一列由管道“|”填充以及我试图获取的信息。

例如:

View(Table$Column)
"|1||KK|12|Gold||4K|"
"|1||Rst|E|Silver||13||"
"|1||RST|E|Silver||18||"
"|1||KK|Y|Iron|y|12||"
"|1||||Copper|Cpr|||E"
"|1||||Iron|||12|F"

依此类推,大约 120K 行。 我试图挖掘的是本系列中第五个管道和第六个管道之间的所有内容,但在它自己的列向量中,所以最终结果如下所示:

View(Extracted)
Gold
Silver
Silver
Iron
Copper
Iron

我不想使用正则表达式。我这里的工具仅限于 R。你们有什么建议如何克服这个问题吗?

谢谢。


1)假设 x 在最终使用时的注释中可重复定义read.table如图所示。不使用正则表达式或包。

read.table(text = Table$Column, sep = "|", header = FALSE, 
  as.is = TRUE, fill = TRUE)[6]

giving:

      V6
1   Gold
2 Silver
3 Silver
4   Iron
5 Copper
6   Iron

2)这种替代方案确实使用了正则表达式(问题要求不要使用正则表达式),但以防万一,这里有一个 tidyr 解决方案。请注意,它需要 tidyr 0.8.2 或更高版本,因为早期版本的 tidyr 不支持NA in the into=争论。

library(dplyr)
library(tidyr)

Table %>% 
  separate(Column, into = c(rep(NA, 5), "commodity"), sep = "\\|", extra = "drop")

giving:

  commodity
1      Gold
2    Silver
3    Silver
4      Iron
5    Copper
6      Iron

3)这是另一个基本解决方案。鉴于 (1) 简单得多,它可能不是您想要的,但我想看看我们是否可以在基础中提出第二种不使用正则表达式的方法。请注意,如果split=的论证strsplit is ""然后它被特殊处理,所以不是正则表达式。它创建一个列表,其每个组件都是单个字符的向量。每个这样的向量都被传递给匿名函数,该函数标记|及其后面字段中的字符及其序号。然后我们取出对应于 5 的字符(第一个除外)|)并使用将它们折叠在一起paste.

data.frame(commodities = sapply(strsplit(Table$Column, ""), function(chars) {
  wx <- which(cumsum(chars == "|") == 5)
  paste(chars[seq(wx[2], tail(wx, 1))], collapse = "")
}), stringsAsFactors = FALSE)

giving:

  commodities
1        Gold
2      Silver
3      Silver
4        Iron
5      Copper
6        Iron

Note

Table <- data.frame(Column = c("|1||KK|12|Gold||4K|",
  "|1||Rst|E|Silver||13||",
  "|1||RST|E|Silver||18||",
  "|1||KK|Y|Iron|y|12||",
  "|1||||Copper|Cpr|||E",
  "|1||||Iron|||12|F"), stringsAsFactors = FALSE)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按字符的第 n 个实例拆分数据框中的列 的相关文章

随机推荐

  • XML 中的未知属性警告

    AndroidManifest 和 XML 布局向我展示了Unknown attribute android 即使属性存在并且应用程序在设备上运行 也会发出警告 例子 Unknown attribute android maxSdkVers
  • 适用于 Java 的小型、简约且快速的 XML 库?

    有时我需要解析 XML 文件 并且仅解析 并且我不想通过手动执行此操作String indexOf 所以我的需要是使用可能最小且快速的 XML 解析库 不幸的是 我不知道类似的事情GSON 180kb 我已经导入了dom4j 但之后我遇到了
  • Angular2/JavaScript - 在(点击)上增加/减少 1

    我想在用户按下添加按钮时递增 递减 然后相应地更新金额值 我尝试过几次 但不幸的是我没有成功 这是代码 addToCart this amount 1 addItem this amount console log plus is this
  • 为什么我不能使用 Guid 作为泛型类型约束?

    我有如下通用方法 我想将 T 限制为仅 Guid 类型 如下所示 public static EntityFindApiResponse EntityFind
  • 在 Django 管理更改列表中,如何显示空格而不是默认的“(无)”?

    当数据库中的字段为空时 Django 在显示更改列表时插入 None 来保留空值的位置 虽然是描述性的 但当变更列表上有很多字段时 一切看起来都非常忙碌 而空白字段同样有帮助 但不会那么混乱 那么有什么方法可以更改 Django 用于表示更
  • 没有 SSH 访问权限的 Rsync

    首先 我不确定这是提出这个问题的最佳位置 所以如果它需要移动 那很酷 我有共享主机 没有 SSH 访问权限 在部署 rsyncing 方面我有哪些选择 我用 PHP 构建应用程序并使用 GIT 不确定这是否会改变事情 使用的 Rsync 旧
  • SBT 多项目中的传递依赖错误

    我正在构建一个 SBT 多项目项目 其中有common模块和logic模块 以及logic dependsOn common In common SparkSQL 2 2 1 org apache spark spark sql 2 2 1
  • WPF属性系统如何经济?

    据说WPF的设计者已经让它变得经济或者性能更高了 有人可以用一个例子来解释一下幕后发生的事情使 WPF 属性系统更加经济吗 您可能指的是依赖属性比普通 CLR 属性 便宜 这一事实 简单来说 依赖属性是使用稀疏数据结构实现的仅当在对象上设置
  • 格式化一个简单的字符串,但是`java.lang.NoSuchMethodError`

    我正在使用 Scala 2 9 2 运行 Scala 并测试一段简单的代码 这段代码是 好的 val title Hashing file s format sizeToStr file length 但我无法理解什么是什么 当我将该代码放
  • 相当于 VB6 中的 Directory.CreateDirectory()

    尝试一次创建多层文件夹 C pie appleie recipes 不使用多个不同的命令 是否有一种类似于 Directory CreateDirectory 的简单方法 这是我在我的一个项目中使用的一些代码 它需要将文件系统对象的引用添加
  • VBA If Else 在 For Next 循环中

    我需要在 For Next 循环中使用 VBA If Else 语句 我尝试了各种语句的排列 但它们都出错了 Sub TestForIfElse Dim Counter As Integer Dim i As Integer For i 1
  • 如何将多个对象分组以便将它们作为一个单元旋转?

    我需要一些关于 OpenGL 中旋转任务的最佳方法的指导 我知道如何使用四元数在 3D 空间中旋转对象 我可以平移它们 一切都很好 但我想知道将不同对象的集合视为单个实体以进行旋转的最佳方法 例如 假设您有一张桌子 上面放着物品 每个都有自
  • 在 python 3.x 中创建给定列表的所有子集的列表

    如何在 python 3 x 中创建给定列表的所有子集的列表 给出的列表就像 1 2 3 我想要一个像这样的输出 1 2 3 1 2 2 3 1 3 1 2 3 您可以使用itertools combinations https docs
  • 如何找到Kubernetes集群的集群和服务CIDR?

    一旦 Kubernetes 集群已经运行 如何找到它的集群 服务 CIDR 我知道对于 Minikube 它是 10 0 0 1 24 对于 GKE 您可以通过以下方式找到 gcloud container clusters describ
  • 如何实现 DDD 存储库来处理具有多个实体的查询?

    我正在努力在 net 解决方案中使用 DDD 来实现需求 我会尽量减少细节 实体 类别 UId 名称 属性 UId 名称 属性值 属性值 UId 名称 ParentAttributeUId 进程 UId 名称 属性值 类别 数据模型 每个进
  • Bootbox:使默认按钮与 ENTER 键一起使用?

    正如标题所示 我想添加 Enter 键作为 Bootbox js 的事件处理程序 当调用alert 弹出窗口时 您可以按 Enter 键将其关闭 但 Bootbox js 的情况并非如此 我不知道如何访问 Bootbox js 内的按钮来添
  • 如何在 GORM 中连接多个表

    我是 GOlang 和 GORM 的新手 我对如何使用 GORM 进行多表连接有些困惑 Example Tables Department Fields gorm Modal dep name Employee Fields gorm Mo
  • 如何获取取消引用的匿名数组的第 n 个元素?

    use strict my anon 1 3 5 7 9 my aref anon print 3rd element aref 2 n 我想获取匿名数组的第 n 个元素 anon超过 aref多变的 在代码中我想得到第三个元素 anon通
  • 如何为我的 Elastic Beanstalk 单实例配置 SSL

    我是 AWS 新手 我的基于 Java 的 RESTAPI 在单实例 EBS 上运行 现在我尝试将 SSL 证书安装到上述单实例 EBS 中 以便它可以处理 https 请求 我正在尝试创建自签名证书此时在我的 Windows 机器上获取证
  • 按字符的第 n 个实例拆分数据框中的列

    我有一个包含几列的数据框 其中一列由管道 填充以及我试图获取的信息 例如 View Table Column 1 KK 12 Gold 4K 1 Rst E Silver 13 1 RST E Silver 18 1 KK Y Iron y