在基 r 中,我可以根据行范围对 data.frame 进行子集化:
mtcars[1:5,]
或者我可以根据逻辑条件进行子集:
mtcars[mtcars$cyl==6,]
但我似乎无法同时做到:
mtcars[1:5 & mtcars$cyl==6,]
警告信息:在 1:5 & mtcars$cyl == 6 中:较长的对象长度不是较短对象长度的倍数
有没有另一种方法可以做到这一点?
用例是使用 LaF 包加载一个巨大的 .csv 文件,它允许使用类似于 base r 的命令进行过滤,但是使用行范围比使用条件加载内容要快得多,并且添加多个条件意味着我有时会等待一天的数据加载。
这似乎很明显,但我无法弄清楚。我有一个包含州名和其他随机单词的字符向量,并想提取州名。
df <- data.frame(string = c("The quick brown Arizona","jumps over the Alabama","dog Arkansas"))
Run Code Online (Sandbox Code Playgroud)
我可以单独创建提取状态名称:
df$state[grepl("Alabama",df$string)] <- "Alabama"
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何在不复制和粘贴 42 次的情况下为所有状态复制它。我得到的最接近的是:
find.state <- function(x){
df$state[grepl(x,df$string)] <- x
}
lapply(state.name, find.state)
Run Code Online (Sandbox Code Playgroud)
但这只是打印所有州名。
r ×2