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