- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个看起来像这样的数据框。我将其命名为“df_raw”。
"HRHHID\t15\tHOUSEHOLD IDENTIFIER\t(Part 1)\t1- 15"
"HRMONTH\t2\tMONTH OF INTERVIEW\t16-17"
"HRYEAR4\t4\tYEAR OF INTERVIEW\t\t18-21"
"HURESPLI\t2\tLINE NUMBER OF THE RESPONDENT\tCURRENT\t22 - 23""FILLER\t2\t\t27 - 28"...
我正在尝试提取末尾的数字范围,例如1-15、16-17、18-21等。我在正则表达式测试器 ( https://regexr.com/63nl1 ) 上准备了我的正则表达式语法,它似乎针对我想要的内容。
正则表达式:\d+(\s?)-(\s?)\d+$
然后我转到 R 并尝试使用 tidyr 中的 extract 函数(这是我第一次使用它),然后收到错误:“错误:regex
应该定义 1 个组;找到了。”
df_raw %>%
extract(col = value, into = "", regex = "\\d+(\\s?)-(\\s?)\\d+$")
任何人都可以帮助我了解如何对正则表达式进行分组,以便提取功能正常工作吗?
非常感谢,大卫
最佳答案
我们可以通过指定空白
来使用trimws
来删除所有内容,直到\t
library(dplyr)
library(stringr)
df_raw %>%
mutate(new = str_remove_all(trimws(value, whitespace = ".*\t"), "\\s+"))
-输出
# A tibble: 5 x 2
value new
<chr> <chr>
1 "HRHHID\t15\tHOUSEHOLD IDENTIFIER\t(Part 1)\t1- 15" 1-15
2 "HRMONTH\t2\tMONTH OF INTERVIEW\t16-17" 16-17
3 "HRYEAR4\t4\tYEAR OF INTERVIEW\t\t18-21" 18-21
4 "HURESPLI\t2\tLINE NUMBER OF THE RESPONDENT\tCURRENT\t22 - 23" 22-23
5 "FILLER\t2\t\t27 - 28" 27-28
或者使用extract
,OP 帖子中的代码显示多个捕获组,而我们只想提取到单个列中。在这种情况下,只需获取数字 (\\d+
),后跟任意空格 (\\s*
)、-
,然后是任意空格和数字,用 (...)
将其包装为字符串末尾 ($
) 的捕获组
library(tidyr)
df_raw %>%
extract(col = value, into = "new", "(\\d+\\s*-\\s*\\d+)$")
# A tibble: 5 x 1
new
<chr>
1 1- 15
2 16-17
3 18-21
4 22 - 23
5 27 - 28
或者仅使用基础R
trimws(df_raw$value, whitespace = ".*\t")
[1] "1- 15" "16-17" "18-21" "22 - 23" "27 - 28"
df_raw <- structure(list(value = c("HRHHID\t15\tHOUSEHOLD IDENTIFIER\t(Part 1)\t1- 15",
"HRMONTH\t2\tMONTH OF INTERVIEW\t16-17", "HRYEAR4\t4\tYEAR OF INTERVIEW\t\t18-21",
"HURESPLI\t2\tLINE NUMBER OF THE RESPONDENT\tCURRENT\t22 - 23",
"FILLER\t2\t\t27 - 28")), row.names = c(NA, -5L), class = c("tbl_df",
"tbl", "data.frame"))
关于r - {tidyr} 中的提取函数存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68777138/
我正在为网络元分析准备数据,但在输入列时遇到困难。 如果我有这个初始数据集: Study Trt y sd n 1 1 -1.22 3.70 54 1
这个问题在这里已经有了答案: How do I get a contingency table? (6 个回答) Faster ways to calculate frequencies and ca
我有一个看起来像这样的数据集 site % unite(D01, D01_1, D01_2, sep = "/", remove = TRUE) %>% unite(D02, D02_1, D
我有以下数据: > data data unique grouping value 1 1 a 15 2 2
我注意到了 tidyr(0.4.0)使用 spread 时对值列进行排序,如 tidyr(0.3.1)按照它们在 gather 之前的顺序返回值列. 可重现的示例 1: library(dplyr)
我正在学习 dplyr,来自 plyr,我想从 xtabs 的输出生成(每组)列(每交互)。 简短摘要:我得到 A B 1 NA NA 2 当我想要 A B 1 2 xta
我有一个 data.frame,其中一些单元格包含逗号分隔值的字符串: d % separate_rows(b) %>% separate_rows(c) # a b c # 1
Tidy eval now supports glue strings 所以这很好用: my_summarise5 % mutate( "mean_{{mean_var}}" :=
我有看起来像这样的数据 df = data.frame(name=c("A","A","B","B"), group=c("g1","g2","g1","g2"),
我有一个面板结构的数据框:两年内每个单元的 2 个观察值: library(tidyr) mydf % spread(year, value) %>% filter(2012 > 0.5) 以下工作但
我正在尝试使用 tidyr 包中的 extract 将包含单个字符串的列拆分为 3 个单独的列。该问题的最小工作示例如下: # A tibble: 3 x 1 question_codes
我在 R 中有以下数据框 my_df_test my_df_test V1 V2 V3 V4 V5 V6_S1 V6_S2 V7_S1 V7_S2 1 1 A S1
我有一个看起来像这样的数据框。我将其命名为“df_raw”。 "HRHHID\t15\tHOUSEHOLD IDENTIFIER\t(Part 1)\t1- 15" "HRMONTH\t2\tMONT
我搜了又搜,找到了类似的东西,但没有什么是对的。希望这个问题没有得到解答。 假设我有一个包含 Y、N 的列,有时还有额外的信息 df%separate('Surgery',c("Surgery
我想使用 tidyr 将数据分布在多个列上。 dat % gather(variable, value, -(ID:col1)) %>% unite(temp, col1, variab
tidyr 的扩展函数仅接受不带引号的列名。有没有办法可以传递包含列名的变量例如 # example using gather() library("tidyr") dummy.data % gath
我的问题类似于 this question .我正在尝试 tidyr::gather多列。但是,链接中提供的解决方案并不理想,因为所有列中的属性通常不相同,因此它们被删除。 请注意,我知道如何使用基础
我在 R 中有以下数据框 my_df_test my_df_test V1 V2 V3 V4 V5 V6_S1 V6_S2 V7_S1 V7_S2 1 1 A S1
我有一个看起来像这样的数据框。我将其命名为“df_raw”。 "HRHHID\t15\tHOUSEHOLD IDENTIFIER\t(Part 1)\t1- 15" "HRMONTH\t2\tMONT
这个问题在这里已经有了答案: Reshaping data.frame from wide to long format (8 个答案) 关闭 2 年前。 我正在尝试学习如何使用 tidyr 将宽数
我是一名优秀的程序员,十分优秀!