Разделение кадра данных, если строки числовые или нет в 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))