【发布时间】:2018-05-16 02:03:24
【问题描述】:
我正在从在线 csv 文件中读取数据框,但创建文件的人不小心在列中输入了一些数字,这些数字应该只是城市名称。 cities.data 表的示例。
City Population Foo Bar
Seattle 10 foo1 bar1
98125 20 foo2 bar2
Kent 98042 30 foo3 bar3
98042 Kent 30 foo4 bar4
删除城市列中只有数字的行后所需的输出:
City Population Foo Bar
Seattle 10 foo1 bar1
Kent 98042 30 foo3 bar2
98042 Kent 30 foo4 bar4
我想删除城市列中只有数字的行。 Kent 98042 和 98042 Kent 都可以,因为它包含城市名称,但由于 98125 不是城市,我删除了该行。
我无法使用is.numeric,因为该数字在 csv 文件中被读取为字符串。我尝试使用正则表达式,
cities.data <- cities.data[which(grepl("[0-9]+", cities.data) == FALSE)]
但这会删除包含任何数字的行,而不仅仅是只包含数字的行,例如
City Population Foo Bar
Seattle 10 foo1 bar1
"Kent 98042" 已被删除,即使我想保留该行。
建议?请和谢谢!
【问题讨论】:
-
你想在文本之后保留这些数字吗?例如,在您想要的输出中,第三个观察值必须是“Kent 98042”还是“Kent”正常?
-
尝试添加字符串
grepl("^[0-9]+", cities.data)的强制开头 -
我不需要城市后面的数字,只需要“肯特”就可以了,但我认为这样做可能会更难。哦,对不起,我忘了包括一个数字在城市前面的例子,例如“98042 Kent”导致“^”不起作用,因为它消除了该行。
-
@siushi 我刚刚在下面添加了一个解决方案,可以在删除所有数字的同时解决它,并且还应该处理文本前的情况。
标签: r regex dataframe filter dplyr