基于列表对象的子集数据框

克里斯·鲁勒曼

我在第一个列中有一个包含语音数据的数据框Turn

test <- data.frame(
  Turn = c("Hi. I'm you an' you are me cos",
          "she'd've been so happy cos with all this stuff goin' on",
          "but we're in this together, because y' know things happens",
          "so you can't, cos well, ah because you know why!",
          "not now because it's too late!"), stringsAsFactors = F)

我想cos和/或之前至少有四个单词的because那些行上对数据帧进行子集化为此我计算的指数cos,并because在他们的Turn

test$Index <- sapply(strsplit(test$Turn, " "), function(x) which(x == 'cos'|x == 'because'))
test
                                                        Turn Index
1                             Hi. I'm you an' you are me cos     8
2    she'd've been so happy cos with all this stuff goin' on     5
3 but we're in this together, because y' know things happens     6
4           so you can't, cos well, ah because you know why!  4, 7
5                             not now because it's too late!     3

一行中有多个索引。这就是为什么我这样子设置的尝试失败了的原因:

test[test$Index >= 5,]
Error in `[.data.frame`(test, test$Index >= 5, ) : 
  (list) object cannot be coerced to type 'double'

如何test通过忽略第二个列出的Index来进行子集化

预期结果:

test
                                                        Turn Index
1                             Hi. I'm you an' you are me cos     8
2    she'd've been so happy cos with all this stuff goin' on     5
3 but we're in this together, because y' know things happens     6

对于任何答案,我都将不胜感激,其中包括不使用通过索引绕行而使用regex子集程序模式的答案

编辑

sapply通过仅选择列出对象的第一个值,该范式中的解决方案实际上非常简单:

sapply(test$Index, function(x) x[1])
[1] 4 5 6 4 3
维克多·史翠比维

我希望这会给您一个想法:

test <- data.frame(
  Turn = c("Hi. I'm you an' you are me cos",
          "she'd've been so happy cos with all this stuff goin' on",
          "but we're in this together, because y' know things happens",
          "so you can't, cos well, ah because you know why!",
          "not now because it's too late!"), stringsAsFactors = F)
rx <- "^\\s*(?:\\S+\\s+){0,3}(?:cos|because)\\b.*(*SKIP)(*F)|(?:\\S+[\\s,]+){4}\\b(cos|because)\\b"
Turn <- test[grepl(rx, test$Turn, perl=TRUE),]
split <- strsplit(Turn, "\\b(cos|because)\\b")
Index <- sapply(split, function(x) lengths(strsplit(trimws(x[[1]]), "\\s+"))+1)
test <- data.frame(Turn, Index, stringsAsFactors = F)
test

输出:

                                                       Turn Index
1                             Hi. I'm you an' you are me cos     8
2    she'd've been so happy cos with all this stuff goin' on     5
3 but we're in this together, because y' know things happens     6

请参阅R演示主正则表达式演示

正则表达式详细信息

  • ^\s*(?:\S+\s+){0,3}(?:cos|because)\b.*(*SKIP)(*F)-比赛stirng的开始,那么零三个字,然后cosbecause作为整个单词和字符串的其余部分,然后跳过比赛
  • | - 要么
  • (?:\S+[\s,]+){4}\b(cos|because)\b-匹配cosbecause以四个词开头。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

基于字段的子集数据框

来自分类Dev

基于缩放交互的子集数据框

来自分类Dev

R中基于日期的子集数据框

来自分类Dev

基于部分字符串匹配的子集数据框

来自分类Dev

Julia:子集数据框

来自分类Dev

基于每组行数的子集数据帧

来自分类Dev

基于列名的部分匹配的子集数据

来自分类Dev

如何基于colMeans子集数据帧

来自分类Dev

R Shiny:基于checkboxgroupinput的子集数据

来自分类Dev

基于重复模式的子集数据帧

来自分类Dev

基于条件熊猫的子集数据帧

来自分类Dev

基于条件语句的子集数据

来自分类Dev

基于列名的部分匹配的子集数据

来自分类Dev

基于最小值的子集数据

来自分类Dev

基于 R 中条件的子集数据

来自分类Dev

如何在数据框(或子集数据框)列表上循环地理映射功能

来自分类Dev

子集数据框导致错误输出

来自分类Dev

基于R中包含变量名的对象的子集数据帧

来自分类Dev

R子集数据按列表

来自分类Dev

基于行或列匹配的多个数据框的子集列表

来自分类Dev

基于列表对 Python 3.x 数据框进行子集

来自分类Dev

如何基于一些搜索字符串创建正则表达式以子集数据框?

来自分类Dev

向量中基于条件的子集数据帧

来自分类Dev

向量中基于搜索模式的子集数据帧

来自分类Dev

基于列名称的字符向量的子集数据帧

来自分类Dev

基于列中的数值的子集数据表

来自分类Dev

R-基于重复序列的子集数据帧

来自分类Dev

基于列中的数值的子集数据表

来自分类Dev

R:有光泽-基于来自checkboxGroupInput的选择的子集数据