通过仅在R中保留特定列的数值来筛选数据帧



我有以下数据帧

2017201520172017
集团成本 年度
A 21
A 22 2016
A 关闭
B 12
B 11 2016
C 结束
C 关闭 2016
C 13 2015

您可以使用正则表达式来过滤数据帧的相关行。正则表达式^\d+(\.\d+)?$将检查只包含数字的字符,可能使用.作为小数分隔符(,即2.3)。然后,如果需要,可以使用as.numeric()Cost列转换为数字。

参见以下示例:

Group = c("A", "A", "A", "B", "B", "C", "C", "C")
Cost = c(21,22,"closed", 12, 11,"ended", "closing", 13)
Year = c(2017,2016,2015,2017,2016,2017,2016,2015)
df = data.frame(Group, Cost, Year)

df[grep(pattern = "^\d+(\.\d+)?$", df[,"Cost"]), ]
#>   Group Cost Year
#> 1     A   21 2017
#> 2     A   22 2016
#> 4     B   12 2017
#> 5     B   11 2016
#> 8     C   13 2015

请注意,即使Cost列属于factor类,而使用df[!is.na(as.numeric(df$Cost)), ]则不属于。对于后者,您需要先添加as.character()df[!is.na(as.numeric(as.character(df$Cost))), ]。这两种技术都保持因子水平。

最新更新