如果行是数字或不在R中,则拆分数据帧

时间:2015-10-27 10:13:01

标签: r dataframe table-splitting

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

split(df, grepl('^\\d+$', df$Contact))