用NA替换数据框第一列中的数字

时间:2018-07-30 22:17:48

标签: r

我有一个数据框,其中第一列始终为chr,它不能更改,因为它包含数字和其他文本的组合。

我需要找到一种方法来识别第一列中的数字实例并替换为NA。

x

3 个答案:

答案 0 :(得分:2)

在基数R中为:

example_df_before$myNums[grepl("^\\d+$",example_df_before$myNums)] <- NA
example_df_before
#    myNums myChars
# 1       A   Adesc
# 2    TEXT   Bdesc
# 3    <NA>       C
# 4    <NA>    Ddes
# 5    <NA>      Ec
# 6    <NA>       F
# 7    <NA>       G
# 8    <NA>      99
# 9    <NA>      12
# 10   <NA>      11
# 11   <NA>   TEST2

答案 1 :(得分:0)

我们通过检测数字来replace'myNums'

library(tidyverse)
example_df_before %>% 
  mutate(myNums = replace(myNums, str_detect(myNums, "^\\d+$"), NA)) 
#   myNums myChars
#1       A   Adesc
#2    TEXT   Bdesc
#3    <NA>       C
#4    <NA>    Ddes
#5    <NA>      Ec
#6    <NA>       F
#7    <NA>       G
#8    <NA>      99
#9    <NA>      12
#10   <NA>      11
#11   <NA>   TEST2

或使用base R

is.na(example_df_before$myNums) <- grepl("^\\d+$", example_df_before$myNums)

答案 2 :(得分:0)

您也可以依靠as.numeric来通过将文本强制转换为数字来标识数字。这具有识别"1e6"之类的代表100万的值的副作用。

as.numeric("1e6")+1
#[1] 1000001

example_df_before$myNums[!is.na(as.numeric(example_df_before$myNums))] <- NA
#   myNums myChars
#1       A   Adesc
#2    TEXT   Bdesc
#3    <NA>       C
#4    <NA>    Ddes
#5    <NA>      Ec
#6    <NA>       F
#7    <NA>       G
#8    <NA>      99
#9    <NA>      12
#10   <NA>      11
#11   <NA>   TEST2
相关问题