根据特定列中是否包含字符来删除 R 中的行
Getting Rid of rows in R based on if a specific column has a character in it
在 R 中使用此示例数据框:
1123 2 3 4
2789 1 3 5
C2124 1 44 6
CS112 3 32 1
这个数据框很大,但我相信这是解决问题真正需要的所有信息。如何删除数据框中第一列(我们称之为 x 和数据框 df)以 C 或 CS 开头的所有行?我认为我的数据框是列表格式,实际上没有矢量化,因为 gsub 不起作用。
这可以通过 grep
来匹配仅包含数字的元素,包括从开始 (^
) 到结束 ($
) 的 .
并对行进行子集化基于这个逻辑 vector
df[grepl("^[0-9.]+$", df[,1]), ]
或者简单地转换为 numeric
并且非数字元素将为 NA(带有友好警告并通过使用 is.na
转换为逻辑向量来删除这些行
df[!is.na(as.numeric(df[,1])),]
对于以 'C' 或 'CS' 开头的字符串的特定情况,使用正则表达式 ("^CS*
) 匹配它,这意味着字符串以 'C' 开头,后跟0 个或多个 'S' 并否定 (!
) 逻辑 vector
以对行
进行子集化
df[!grepl("^CS*", df[,1]),]
使用 dplyr
和 stringr
:
df %>% filter(!str_detect(x, "^C"))
或使用grepl
:
df %>% filter(!grepl("^C", x))
在 R 中使用此示例数据框:
1123 2 3 4
2789 1 3 5
C2124 1 44 6
CS112 3 32 1
这个数据框很大,但我相信这是解决问题真正需要的所有信息。如何删除数据框中第一列(我们称之为 x 和数据框 df)以 C 或 CS 开头的所有行?我认为我的数据框是列表格式,实际上没有矢量化,因为 gsub 不起作用。
这可以通过 grep
来匹配仅包含数字的元素,包括从开始 (^
) 到结束 ($
) 的 .
并对行进行子集化基于这个逻辑 vector
df[grepl("^[0-9.]+$", df[,1]), ]
或者简单地转换为 numeric
并且非数字元素将为 NA(带有友好警告并通过使用 is.na
df[!is.na(as.numeric(df[,1])),]
对于以 'C' 或 'CS' 开头的字符串的特定情况,使用正则表达式 ("^CS*
) 匹配它,这意味着字符串以 'C' 开头,后跟0 个或多个 'S' 并否定 (!
) 逻辑 vector
以对行
df[!grepl("^CS*", df[,1]),]
使用 dplyr
和 stringr
:
df %>% filter(!str_detect(x, "^C"))
或使用grepl
:
df %>% filter(!grepl("^C", x))