我有很多文件,每个单元格包含一串字母和特殊字符,然后是一个数字。我想从R中的每个单元格中删除所有非数字字符。
我已经研究过使用gsub
和lapply
的解决方案,但它们似乎需要您指定要删除的字符串。这是一个问题,因为每个单元格中的每个字母/特殊字符串都是唯一的。我也尝试过使用this question,但它完全删除了所有字符(我猜它不能识别数字为数字...)。
下面是我的df
的例子(只有一行):
| 色谱柱A|B栏|色谱柱C|D栏|E列|F列|
| --------------|--------------|--------------|--------------|--------------|--------------|
| 设计日期:13|hhh:34|dsd:15|FFD:67|简体中文|hhj:43|
我想:
| 色谱柱A|B栏|色谱柱C|D栏|E列|F列|
| --------------|--------------|--------------|--------------|--------------|--------------|
| 十三|三十四|十五岁|六十七|八九|四十三|
3条答案
按热度按时间yrwegjxp1#
我们可以
6ovsh4lw2#
既然你在问题中特别提到了
lapply
和gsub
,那么在基R中你可以这样做:注意
[]
在使用lapply
时很重要(表示它应该在所有列上运行)。\\D
表示除了数字之外的所有内容,所以如果有负数,它也会删除“-”,在这种情况下,您可能需要提取冒号之后的所有内容:无论哪种方式,输出都是:
x6yk4ghg3#
1)Base R我们删除所有非数字字符(
\\D
表示非数字),然后使用type.convert
将剩下的字符转换为数字。不使用包,也不覆盖DF-覆盖对象容易出错。(输入以可重现的形式显示在最后的注解中。)2)collapse::dapply使用collapse包,我们可以使用
dapply
在列上应用trimws
,然后如上所述使用type. convert。3)purrr我们可以在下面使用
map
。(map_dfr
也可以工作,但最近被弃用。)4)furrr我们可以从purrr中使用
map_dfr
,也可以从furrr中使用相应的函数。我们在下面展示了后者。map_dfr
在purrr中已经被取代,尽管它仍然存在并且没有被弃用。注意事项