限制R中数据框中的列类

Posted

技术标签:

【中文标题】限制R中数据框中的列类【英文标题】:constraining on classes of column in data frame in R 【发布时间】:2015-03-24 07:47:58 【问题描述】:

所以,我正在尝试编写一个以数据框作为输入的函数,以检查数据框的列是否仅包含整数、字符(非因子)和数字向量。在这种情况下,我想返回值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

有人可以帮忙吗?

【问题讨论】:

试试f1 &lt;- function(dat) !any(sapply(dat, is.factor)); f1(df1); f1(df2) 您是说希望所有列是数字还是字符?那么其他类呢,比如“日期”? 是的,所有列应该是数字、字符或整数。 @akrun,感谢您的回复。但是您的解决方案仅检查它是否不包含在因子列中。但是这里我们也需要检查其他类型。 【参考方案1】:

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

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

【讨论】:

以上是关于限制R中数据框中的列类的主要内容,如果未能解决你的问题,请参考以下文章

根据向量中的 *not* 选择 R 数据框中的列

从 R 中的数据框中删除重复的列组合

如何删除R数据框中的列[重复]

什么函数允许我根据R中列中的值从数据框中的列中提取数据?

在 R 中的数据框中的列的每个唯一值之后添加一个空白行

删除数据框中的列