r - 在带有矢量元素的小标题上使用 dplyr 时出现问题 [列出列]
问题描述
我在使用 dplyr 和 stringr 函数(特别是 str_split())进行文本处理时遇到了一些问题。我认为我误解了在处理向量/列表元素时如何正确使用 dplyr 的一些非常基本的东西。
这是一个小标题,df ...
library(tidyverse)
df <- tribble(
~item, ~phrase,
"one", "romeo and juliet",
"two", "laurel and hardy",
"three", "apples and oranges and pears and peaches"
)
现在我创建一个新列splitPhrase ,方法是在其中一个列上使用 "和" 作为分隔符执行str_split() 。
df <- df %>%
mutate(splitPhrase = str_split(phrase,"and"))
在 RStudio 中,这似乎有点用,我看到了这个......
在控制台中,我看到我的新列 splitPhrase 实际上是由列表组成的……但在 Rstudio 显示中看起来是正确的,对吧?
df
#> # A tibble: 3 x 3
#> item phrase splitPhrase
#> <chr> <chr> <list>
#> 1 one romeo and juliet <chr [2]>
#> 2 two laurel and hardy <chr [2]>
#> 3 three apples and oranges and pears and peaches <chr [4]>
我最终想要做的是提取每个 splitPhrase的最后一项。换句话说,我想达到这个...
问题是我看不到如何只抓取每个 splitPhrase 中的最后一个元素。如果它只是一个向量,我可以做这样的事情......
#> last( c("a","b","c") )
#[1] "c"
#>
但这在 tibble 中不起作用,也不会想到其他事情:
df <- df %>%
mutate(lastThing = last(splitPhrase))
# Error in mutate_impl(.data, dots) :
# Column `lastThing` must be length 3 (the number of rows) or one, not 4
df <- df %>% group_by(splitPhrase) %>%
mutate(lastThing = last(splitPhrase))
# Error in grouped_df_impl(data, unname(vars), drop) :
# Column `splitPhrase` can't be used as a grouping variable because it's a list
所以,我认为我“没有得到”如何使用 table/tibble 列中元素内的向量。这似乎与在我的示例中它实际上是一个向量列表的事实有关。
是否有特定的功能可以帮助我,或者有更好的方法来解决这个问题?
由reprex 包(v0.2.1)于 2018 年 9 月 27 日创建
解决方案
没有测试效率,但我们也可以使用正则表达式提取最后一个“and”之后的字符串段:
与sub
:
library(dplyr)
df %>%
mutate(lastThing = sub("^.*and\\s", "", phrase)) %>%
select(-phrase)
与str_extract
:
library(stringr)
df %>%
mutate(lastThing = str_extract(phrase, "(?<=and\\s)\\w+$")) %>%
select(-phrase)
与extract
:
library(tidyr)
df %>%
extract(phrase, "lastThing", "^.*and\\s(\\w+)")
输出:
# A tibble: 3 x 2
item lastThing
<chr> <chr>
1 one juliet
2 two hardy
3 three peaches
推荐阅读
- c# - 返回 IAsyncEnumerable 的 API
但结果未流式传输 - javascript - 获取文本内容
- node.js - docker-compose + npm run start 中的端口不起作用
- objective-c - 比较两个 UIColors(点击 UIImageView 中的位置与资产目录颜色)
- android - 如何使用 Kotlin Coroutines 处理 Android 传感器事件?
- javascript - Javascript:如何根据点击坐标在画布上查找特定形状
- c++ - 使用 GMock 命名空间的模拟方法
- stata - Stata:根据运行重叠更改时间段
- python - Python Django - 在模板中选择现有的随机对象 ID
- react-native - 调整大小和拖动组件 - React Native