我只需要从一个混合类的列中提取数值。下面是一个示例数据集:
df <- data.frame(id = c(1,2,3,4,5,6,7,8,9,10),
score = c("1","0","1+AB","0,B","1,1","A","B","1,A","1","0,A+B,C"))
> df
id score
1 1 1
2 2 0
3 3 1+AB
4 4 0,B
5 5 1,1
6 6 A
7 7 B
8 8 1,A
9 9 1
10 10 0,A+B,C
在score
列中,我只需要数值,如果该值没有数值,则重新编码的值应为0
,同样,如果数值重复为1,1
,则只重新编码1
。
我怎样才能得到下面所需的输出。
> df
id score recoded_score
1 1 1 1
2 2 0 0
3 3 1+AB 1
4 4 0,B 0
5 5 1,1 1
6 6 A 0
7 7 B 0
8 8 1,A 1
9 9 1 1
10 10 0,A+B,C 0
3条答案
按热度按时间qpgpyjmq1#
使用
str_extract
提取数字部分,然后使用coalesce
提取0k2fxgqgv2#
我们可以从
readr
中使用parse_number
来提取每个字符串的第一个数字,有趣的是,
并不分隔数字,所以要将其用于1,1
,我们必须将,
修改为;
:vnzz0bqm3#
使用
sub
的基R方法