【发布时间】:2022-01-26 04:06:52
【问题描述】:
我有一个 data.frame,其中一列数字数据被 readr 作为字符读取,至少部分是因为某些值是“N/A”。我不知道这些值是否真的包含引号。
我正在尝试提取该列中包含纯数字以外的内容的所有值,即包含非数字 1-9 的任何字符。我的目的是了解其中有多少,并查看除了“N/A”之外是否还有其他格式,以准备用其他格式替换它们,然后将向量转换为数字。
虽然我相信有更聪明的方法可以做到这一点,但我正在尝试使用从使用 R 的 grepl 命令应用于向量的正则表达式创建的逻辑向量来提取这些值。
A2 <- 1:10
A3 <- sample(1000:9999, 10)
dat_df <- data.frame(A2, A3)
str(dat_df)
dat_df$A3[1:3]<- c("N/A", "", "banana")
dat_df 是一个简化的数据集,提供了可重复性。
这是一个例子
dat_df$A3[grepl(as.character(\<\d*[a-zA-Z][a-zA-Z0-9]*>\), x = dat_df$A3)]
这个特定的给出了错误
Error: unexpected '<' in dat_df"$A3[grepl(as.character(\<"
我已经尝试了很多这样的变种。这些包括:
将初始数据包装在 ( ) 中(以防出现优先级问题)。
使用帮助文件推荐的as.character 或带引号将正则表达式定义为字符串。
用^ 和$ 代替\< 和>\ 包裹正则表达式的中心部分
将所有“\”s 加倍
在每种情况下,我都会得到上面显示的语法错误的一些变体,随版本而变化。
Error: unexpected (and then)
- '^' 如果它以'^'开头
- '\' 如果它以'\'开头
- ' 开头
- '\d' 如果用引号括起来而不是使用 as.character
我无法从这种错误模式中找出正面或反面。
感激地接受和承认任何帮助。
【问题讨论】:
标签: r regex subset data-extraction grepl