有条件地将列从char更改为data.frame

时间:2018-06-19 17:11:36

标签: r dataframe

我正在尝试使用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"应该被转换为因数。

2 个答案:

答案 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)))])