我有一个混合了数字、文本和NA值的列。我只想从col2
中提取数字值
col1 <- c('t1', 't2', 't3', 't4', 't5', 't6', 't7', 't8', 't9', 't10')
col2 <- c(300, '>200m', NA, 'result 50 mg/g', NA, 'Not data', 'pending', NA, 'positive', 'data >20 mile/h')
df <- data.frame(col1, col2)
我的意图是:
- 所有数字将保持为数字
- NA值将保持NA
- 字符/文本将转换为NA值
- 如果是文本混合体,则提取编号(例如,
'data >20 mile/h'
到20
)
预期输出(col3
)如下所示:
col3 <- c(300, 200, NA, 50, NA, NA, NA, NA, NA, 20)
df2 <- data.frame(col1, col3)
2条答案
按热度按时间ulydmbyx1#
使用
str_extract
从stringr
中提取数字。使用
gsub
,删除除数字以外的所有内容。或者使用
\\D
(非数字)代替[:alpha:]
和[:punct:]
(感谢@thelatemail和@onyambu)!数据
xoefb8l82#
一个可能的选项是使用readr package中的
parse_number()
,例如创建于2023年2月7日,使用reprex v2.0.2