我有以下数据帧
集团成本 | 年度 | |
---|---|---|
A | 21 | 2017|
A | 22 | 2016 |
A | 关闭 | 2015|
B | 12 | 2017|
B | 11 | 2016 |
C | 结束 | 2017|
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))), ]
。这两种技术都保持因子水平。