限制R中数据帧中的列类

时间:2015-01-25 20:12:21

标签: r class types dataframe

所以,我试图编写一个以数据帧作为输入的函数来检查数据帧的列是否只包含整数,字符(非因子)和数字向量。在这种情况下,我想返回值TRUE。如果它包含其他内容,我想返回FALSE

例如:

df1 <- data.frame( a = 1:4, b = c("x","y", "z","w"), c = 8:11, stringsAsFactors = FALSE)
df2 <- data.frame(a = 2:5,  b = c("m", "n", "o", "p"),c = 11:14, stringsAsFactors = TRUE)

在这种情况下,函数应返回TRUE输入df1,因为它具有整数和字符类型列。但对于df2,我想返回FALSE,因为它包含因子列b

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

由于整数也是数字,因此可以使用条件

is.numeric(x) | is.character(x)

这是一个功能:

numOrChar <- function(df) {
    f <- function(x) is.numeric(x) | is.character(x)
    all(vapply(df, f, logical(1L)))
}

numOrChar(df1)
# [1] TRUE
numOrChar(df2)
# [1] FALSE