如何在R语言中移除数据框c1列仅含数值的记录?
嘿,这两个R语言处理数据框的问题我熟,直接给你实用的解法:
一、移除数据框中所有字符型列里仅含数值的行
这里分两种常见场景,你按需挑选:
先整个示例数据框方便你测试
# 创建带字符型和数值型列的示例数据 df <- data.frame( col1 = c("abc", "123", "def", "-45.6"), col2 = c("789", "xyz", "10.11", "mno"), col3 = c(1, 2, 3, 4), # 数值型列,我们不处理它 stringsAsFactors = FALSE )
场景1:移除任意字符型列中存在纯数值的行
意思是只要某一行的任意一个字符型列是纯数字(包括整数、小数、负号),就把这行删掉:
# 先挑出所有字符型列 char_cols <- sapply(df, is.character) # 定义一个判断字符是否为纯数值的函数(支持正负整数、小数) is_numeric_char <- function(x) { grepl("^-?\\d+(\\.\\d+)?$", x) } # 过滤行:保留那些没有任何字符型列是纯数值的行 df_filtered1 <- df[!apply(df[, char_cols], 1, function(row) any(is_numeric_char(row))), ]
场景2:移除所有字符型列都为纯数值的行
意思是只有当某一行的所有字符型列都是纯数字时,才删掉这行:
# 过滤行:保留那些不是所有字符型列都是纯数值的行 df_filtered2 <- df[!apply(df[, char_cols], 1, function(row) all(is_numeric_char(row))), ]
如果你只需要判断整数(不需要小数和负号),把正则改成"^\\d+$"就行。
二、移除c1列仅含数值的记录
这个更简单,只针对c1列判断过滤就行:
先创建示例数据
# 包含c1、c2、c3三个字符型列的示例数据 df2 <- data.frame( c1 = c("123", "hello", "45.6", "-789", "world"), c2 = c("abc", "def", "ghi", "jkl", "mno"), c3 = c("pqr", "stu", "vwx", "yz", "12a3"), stringsAsFactors = FALSE )
过滤代码
# 复用刚才的判断函数(如果已经定义过就不用重复写) is_numeric_char <- function(x) { grepl("^-?\\d+(\\.\\d+)?$", x) } # 直接过滤掉c1列是纯数值的行 df2_filtered <- df2[!is_numeric_char(df2$c1), ]
内容的提问来源于stack exchange,提问作者Harish
相关产品推荐
相关产品推荐

