0

我有一个数据框(我们称之为'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”归类为数字。

基本上,如果“联系人”列中甚至有一个非数字值,那么代码必须将其归类为非数字

4

2 回答 2

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
于 2015-10-27T10:16:18.697 回答
1

我们可以使用grepl(与@Avinash Raj 创建的方式相同)创建一个分组变量,使用split该数据框创建一个listdata.frames。

split(df, grepl('^\\d+$', df$Contact))
于 2015-10-27T10:18:34.997 回答