以字母开头的子集数据
subseting data that starts with a letter
我有一个包含 45 列和 >8000 个观察值的数据集。列中的变量之一是城市名称。我想删除位于以字母 "S" 开头的城市中的所有观测值。我该怎么做?我是 R 的新手,很抱歉,如果这很简单,但我无法通过搜索找到任何信息。
awk 会更好。像
cat data | awk -F<delimiter> '{if (match($<1-indexed col num>, "^[^sS].*")) { print [=10=] }}'
您可以在 grep 中完成,但它很草率(逗号是分隔符)
cat data | grep -E '^([^,]*,){<0-indexed col num>}[^sS]'
这将 return 只有那些使用 substr()
-ing 函数以大写 "S" 开头的行:
dat[ substr( dat$City, 1 ,1) == "S" , ]
还可以使用:
dat[ grepl("^S", dat$City) , ]
第二个选项是一个非常简单的正则表达式。看看 ?regex 和 ?grep.
你可以使用dplyr
的filter
函数,虽然我不知道它与其他方法相比有多快:
cities <- c("Some", "Random", "Cities", "Stack", "Overflow", "Bla", "Foo")
df <- data.frame(x = seq_along(cities), cities)
require(dplyr)
> df %>% filter(!grepl("^[Ss]", cities))
x cities
1 2 Random
2 3 Cities
3 5 Overflow
4 6 Bla
5 7 Foo
我有一个包含 45 列和 >8000 个观察值的数据集。列中的变量之一是城市名称。我想删除位于以字母 "S" 开头的城市中的所有观测值。我该怎么做?我是 R 的新手,很抱歉,如果这很简单,但我无法通过搜索找到任何信息。
awk 会更好。像
cat data | awk -F<delimiter> '{if (match($<1-indexed col num>, "^[^sS].*")) { print [=10=] }}'
您可以在 grep 中完成,但它很草率(逗号是分隔符)
cat data | grep -E '^([^,]*,){<0-indexed col num>}[^sS]'
这将 return 只有那些使用 substr()
-ing 函数以大写 "S" 开头的行:
dat[ substr( dat$City, 1 ,1) == "S" , ]
还可以使用:
dat[ grepl("^S", dat$City) , ]
第二个选项是一个非常简单的正则表达式。看看 ?regex 和 ?grep.
你可以使用dplyr
的filter
函数,虽然我不知道它与其他方法相比有多快:
cities <- c("Some", "Random", "Cities", "Stack", "Overflow", "Bla", "Foo")
df <- data.frame(x = seq_along(cities), cities)
require(dplyr)
> df %>% filter(!grepl("^[Ss]", cities))
x cities
1 2 Random
2 3 Cities
3 5 Overflow
4 6 Bla
5 7 Foo