Разделение кадра данных, если строки числовые или нет в R

У меня есть фрейм данных (давайте назовем его 'DF'), он состоит из двух столбцов

 Name   Contact
 A      34552325
 B      423424
 C      4324234242
 D      hello1@company.com

Я хочу разбить фрейм данных на два фрейма в зависимости от того, является ли строка в столбце "Контакт" числовой или нет

Ожидаемый результат:

 Name   Contact
 A      34552325
 B      423424
 C      4324234242

а также

 Name   Contact
 D      hello1@company.com

Я устал использовать:

   df$IsNum <- !(is.na(as.numeric(df$Contact))) 

Но это классифицируется как hello1@company.com также как числовое.

В принципе, если в столбце "Контакт" есть хотя бы одно нечисловое значение, код должен классифицировать его как нечисловое

2 ответа

Решение

Вы можете использовать grepl..

x <- " Name   Contact
 A      34552325
 B      423424
 C      4324234242
 D      hello1@company.com"
df <- read.table(text=x, header = T)
x <- df[grepl("^\\d+$",df$Contact),]
y <- df[!grepl("^\\d+$",df$Contact),]
x
#   Name    Contact
# 1    A   34552325
# 2    B     423424
# 3    C 4324234242
y
#  Name            Contact
# 4    D hello1@company.com

Мы можем создать группирующую переменную с grepl (так же, как @Avinash Raj создал), split датафрейм с этим, чтобы создать list data.frames.

split(df, grepl('^\\d+$', df$Contact))
Другие вопросы по тегам