我想确定一个大型data.table的列类.
colClasses <- sapply(DT, FUN=function(x)class(x)[1])
Run Code Online (Sandbox Code Playgroud)
有效,但显然本地副本存储在内存中:
> memory.size()
[1] 687.59
> colClasses <- sapply(DT, class)
> memory.size()
[1] 1346.21
Run Code Online (Sandbox Code Playgroud)
循环似乎不可能,因为data.table"with = FALSE"总是产生data.table.
一种快速而又非常脏的方法是:
DT1 <- DT[1, ]
colClasses <- sapply(DT1, FUN=function(x)class(x)[1])
Run Code Online (Sandbox Code Playgroud)
最优雅,最有效的方法是什么?
所以我在R中有一个名为obesity_map的数据框,它基本上给我了每个县的州,县和肥胖率.它看起来或多或少像这样:
obesity_map = data.frame(state, county, obesity_rate)
Run Code Online (Sandbox Code Playgroud)
我试图通过显示整个美国各县的各种肥胖率来在地图上想象这个:
us.state.map <- map_data('state')
head(us.state.map)
states <- levels(as.factor(us.state.map$region))
df <- data.frame(region = states, value = runif(length(states), min=0, max=100),stringsAsFactors = FALSE)
map.data <- merge(us.state.map, df, by='region', all=T)
map.data <- map.data[order(map.data$order),]
head(map.data)
map.county <- map_data('county')
county.obesity <- data.frame(region = obesity_map$state, subregion = obesity_map$county, value = obesity_map$obesity_rate)
map.county <- merge(county.obesity, map.county, all=TRUE)
ggplot(map.county, aes(x = long, y = lat, group=group, fill=as.factor(value))) + geom_polygon(colour = "white", size = 0.1)
Run Code Online (Sandbox Code Playgroud)
它基本上创建了一个如下所示的图像:

正如你所看到的,美国被划分为奇怪的形状,颜色不是一致的颜色,在不同的渐变中,你不能从中获得很多.但我真正想要的是下面的内容,但每个县都填写:

我对此很新,所以我很感激所有的帮助!
编辑:
这是dput的输出:
dput(obesity_map)
Run Code Online (Sandbox Code Playgroud)
结构(列表(X = 1:3141,FIPS …
我有以下示例:
irisDT <- as.data.table(iris)
mod <- function(dat) {
dat[, index:=(1:nrow(dat))]
setkey(dat, index)
dat <- dat[2:10]
dat[, index:=NULL]
invisible()
}
mod(irisDT)
names(irisDT) # it contains index
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,在调用mod()
函数后索引列仍然存在.删除该行时不是这种情况dat <- dat[2:10].我想,由于行无法通过引用删除,因此创建了另一个data.table.但是,我想删除原始data.table中的索引列.
关于R包data.table的问题:如何以高效内存的方式删除多个data.table列?
假设要删除的列名存储在vector deleteCol中.
In a data.frame, it is:
DF <- DF[deleteCol] <- list()
Run Code Online (Sandbox Code Playgroud)
对于data.table,我试过:
DT[, deleteCol, with=FALSE] <- list()
Run Code Online (Sandbox Code Playgroud)
但这给了 unused argument(s) (with = FALSE)