Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为data.frame中可能的列类编制索引_R_Regex_Loops_Dataframe - Fatal编程技术网

为data.frame中可能的列类编制索引

为data.frame中可能的列类编制索引,r,regex,loops,dataframe,R,Regex,Loops,Dataframe,这个问题更多的是出于好奇。我已经知道如何逐列将类应用于数据帧,但我要寻找的是一种更简单的方法,以显示出于测试目的可能的类是什么 是的,在tidyverse中已经有一些东西可以做到这一点,但是为了找到更好的方法来完成这些步骤,它可能会帮助我完成其他功能和实现 预期结果: 返回一行data.frame,其中插入的是匹配的类/正则表达式名称,而不是检查中的值或逻辑值(见下文) 假数据 假设我们有一包来自未知来源的混合读入数据。。。在解析后,它作为所有字符类(我从基本数据集复制: usa_a <-

这个问题更多的是出于好奇。我已经知道如何逐列将类应用于数据帧,但我要寻找的是一种更简单的方法,以显示出于测试目的可能的类是什么

是的,在tidyverse中已经有一些东西可以做到这一点,但是为了找到更好的方法来完成这些步骤,它可能会帮助我完成其他功能和实现

预期结果: 返回一行data.frame,其中插入的是匹配的类/正则表达式名称,而不是检查中的值或逻辑值(见下文)

假数据 假设我们有一包来自未知来源的混合读入数据。。。在解析后,它作为所有字符类(我从基本数据集复制:

usa_a <- structure(
 list(
  states = c("Alabama", "Alaska", "Arizona", "Arkansas", "California"),
  Murder = c(13.2, 10, 8.1, 8.8, 9), 
  Assault = c(236L, 263L, 294L, 190L, 276L), 
  UrbanPop = c(58L, 48L, 80L, 50L, 91L),
  Rape = c(21.2, 44.5, 31, 19.5, 40.6), 
  log = c(TRUE, TRUE, TRUE, TRUE, TRUE), 
  fracs = c(113.953488372093, 74.4186046511628, 
            109.302325581395, 53.4883720930233, 
            55.8139534883721), 
  mix_bag = c("Mazda RX4", "Mazda RX4 Wag", "Datsun 710", 
              "Hornet 4 Drive", "Hornet Sportabout")
             ), 
  .Names = c("states", "Murder", "Assault", "UrbanPop", 
             "Rape", "log", "fracs", "mix_bag"),
  row.names = c("Alabama", "Alaska", "Arizona", "Arkansas", 
              "California"), 
  class = "data.frame")

usa\a我知道您正在尝试自己的实现,但仅供参考,这里有
utils::type.convert()
。我忘了您可以看看它的utils解决方案,谢谢您的链接;这会有所帮助。
usa_a <- usa_a %>% mutate_all(as.character)
str(usa_a)
$ states  : chr "Alabama"
$ Murder  : chr "13.2"
$ Assault : chr "236"
$ UrbanPop: chr "58"
$ Rape    : chr "21.2"
$ log     : chr "TRUE"
$ fracs   : chr "113.953488372093"
$ mix_bag : chr "Mazda RX4"
rgx.pats <- list(
  numeric = "^(\\d){1,}(\\.(\\d){1,})?",
  logical = "^(TRUE|FALSE)$",
  character = "(?!^[(\\d){1,}(\\.(\\d){1,})?|(TRUE|FALSE)]+$)^.+$"
)
class_idx <- mapply(function(x){
    a <- lapply(names(rgx.pats), function(i){
        if(all(stringi::stri_detect_regex(x, rgx.pats[[i]]))){
            i
        }else{
            FALSE
        }
    })
}, usa_a) %>% {
    d <- as.data.frame(.)
    dd <- sapply(colnames(d), function(i){
        which(!mapply(is.logical,d[[i]]))
    })
    as.data.frame(mapply(function(j, y){
        d[j,y]
    }, dd, names(dd)))
}

class_idx
    states  Murder Assault UrbanPop    Rape     log   fracs   mix_bag
1 character numeric numeric  numeric numeric logical numeric character