【发布时间】:2017-10-05 00:47:47
【问题描述】:
我正在寻找从网页上抓取的不规则信息向量,并将其转换为数据框。
例如,给定一个看起来像这样的向量:
vec <- c("Bank of America", "6%", "JP Morgan", "5%", "Bank of China", "UBS", "7%")
我想创建一个如下所示的数据框:
df <- tibble(bank.name = c("Bank of America", "JP Morgan","Bank of China","UBS"), interest.rate = c(6%, 5%, NA, 7%))
使用正则表达式很容易创建银行名称列。但是,我正在努力创建一个利率向量,将 NA 放在正确的位置。
阅读@guscht 的回答后进行编辑:
@guscht 对这个问题有一个很好的矢量化答案!我担心我们必须使用 for 循环...
另外,我把@guscht的解决方案翻译成tidyverse的语法,看起来是这样的:
test <- c("Bank of America", "6%", "JP Morgan", "5%", "Bank of China", "UBS", "7%")
df <- tibble(bank = test, rate = lead(test,1))
df %>%
filter(str_detect(bank, "%")== FALSE) %>% #Includes only rows that are banks
mutate(rate = ifelse(str_detect(rate, "%") == TRUE, rate, NA)) # converts non-rate values to NA
【问题讨论】:
-
你能指出函数“tibble”来自哪个包吗?
-
@guscht 来自
tidyverse或tibble -
@guscht Tibbles 是 Hadley Wickham 的 Tidyverse 中的一个对象,你可以在这里阅读 Wickham 的解释:R for Data Science
标签: r