我正在尝试使用ROracle
来查询R
中的Oracle数据库。
尽管我面临以下问题,但我已经能够在R
data.frame
中存储表。
假设以下data.frame
,
my_table <- data.frame(name = c("a","b"), surname = c("h", "i"), stuff = c("as", "qweq"))
我的目标是找到一条完全自动化的代码行,这些行会将factor
的所有列转换为characters
并且其名称不包含字符串{ {1}}。
在这种情况下,只有"name"
应该被转换为因数。
答案 0 :(得分:1)
一种dplyr
解决方案:mutate_at
采用诸如tidyselect::contains
之类的选择帮助器函数,该函数在列名中搜索字符串,并且仅对它们进行操作。还有tidyselect::matches
,与之类似,但使用了正则表达式。在这种情况下,由于您希望不的列具有此字符串,因此我否定了这些列的位置。
还请注意,data.frame
的默认设置是将字符向量作为因素,所以这些已经都是因素。
library(tidyverse)
my_table <- data.frame(name = c("a","b"), surname = c("h", "i"), stuff = c("as", "qweq"),
stringsAsFactors = F)
my_table %>%
mutate_at(vars(-contains("name")), as.factor) %>%
as_tibble()
#> # A tibble: 2 x 3
#> name surname stuff
#> <chr> <chr> <fct>
#> 1 a h as
#> 2 b i qweq
您可以省略as_tibble
;我这样做只是为了获得包含列类型的打印输出。
答案 1 :(得分:0)
有多种方法可以执行此操作,这是基本R中的一个简单示例:
my_table <- data.frame(name = c("a","b"), surname = c("h", "i"), stuff = c("as", "qweq"), stringsAsFactors = FALSE)
my_table[, -(grep("name", colnames(my_table)))] <- as.factor(my_table[, -(grep("name", colnames(my_table)))])