我有一个数据框,其中第一列始终为chr,它不能更改,因为它包含数字和其他文本的组合。
我需要找到一种方法来识别第一列中的数字实例并替换为NA。
x
答案 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