我正在使用大型数据集x.我想删除x一组列中的一列或多列中缺少的行,该列x由字符向量指定varcols.
到目前为止,我已经尝试了以下内容:
require(data.table)
x <- CJ(var1=c(1,0,NA),var2=c(1,0,NA))
x[, textcol := letters[1:nrow(x)]]
varcols <- c("var1","var2")
x[, missing := apply(sapply(.SD,is.na),1,any),.SDcols=varcols]
x <- x[!missing]
Run Code Online (Sandbox Code Playgroud)
有更快的方法吗?谢谢.
我试图将美国的地图分成多个窗口(其中一些窗口包含两次相同的状态).我希望比例是恒定的(这样地图不会失真),但也可以最小化地图之间的空间.我不能使用facet_wrap(由于区域的重叠性质 - 并且无论如何,facet_wrap不能具有固定的比例并且每个窗口具有不同的xlim).关于如何改善结果间距的任何建议?
require(data.table)
require(ggplot2)
require(maps)
require(gridExtra)
all_states <- as.data.table(map_data("state"))
setnames(all_states,"region","state")
##define regions with overlapping states
weco.states <- c("oregon","washington","california")
west.states <- c("washington","montana", "idaho","utah","nevada","arizona","new mexico",
"wyoming","colorado","south dakota","texas")
east.states <- c(setdiff(unique(all_states$state), union(weco.states,west.states)),
"texas","south dakota")
all_states[,c("weco","west","east"):=FALSE]
all_states[state%in% weco.states, weco:=TRUE]
all_states[state%in% west.states, west:=TRUE]
all_states[state%in% east.states, east:=TRUE]
p.regbase <- ggplot() + coord_equal() +ylim(c(25,50))
p.weco <- p.regbase + geom_polygon(data=all_states[(weco),], aes(x=long, y=lat, group = group),colour="white", fill="grey" )
p.west <- p.regbase + geom_polygon(data=all_states[(west),], aes(x=long, y=lat, group = group),colour="white", fill="grey" )
p.east <- p.regbase + geom_polygon(data=all_states[(east),], aes(x=long, y=lat, group …Run Code Online (Sandbox Code Playgroud) 在包含对data.table函数调用的R代码中分析内存的正确方法是什么?假设我要确定表达式期间的最大内存使用量。
该参考文献表明Rprofmem可能不是正确的选择:https :
//cran.r-project.org/web/packages/profmem/vignettes/profmem.html
记录通过R的本机API的本机allocVector3()部分完成的所有内存分配,这意味着几乎所有的内存分配都被记录。R的垃圾收集器会在某些时候自动释放所有以这种方式分配的对象。profmem()不会记录垃圾收集事件。未记录的分配是由非R本机库或将内部代码Calloc()/ Free()用于内部对象的R包完成的分配。R垃圾收集器不处理此类对象。
data.table源代码包含对的大量调用Calloc(),malloc()因此这表明这Rprofmem将无法衡量data.table函数分配的所有内存。如果Rprofmem不是正确的工具,那么Matthew Dowle怎么在这里使用它:R:循环遍历data.table中的列?
我发现了一个参考文献,提出了类似的潜在问题gc()(可用于测量两次调用之间的最大内存使用量gc()):https :
//r.789695.n4.nabble.com/Determining-the-maximum-memory-usage -of-a-function-td4669977.html
gc()是一个好的开始。在任务执行之前调用gc(reset = TRUE),在执行任务之后调用gc(),您会在此期间看到R占用的最大额外内存。(这不包括编译后的代码分配的内存,这在重新使用时很难测量。)
我没有发现任何暗示存在类似问题Rprof(memory.profiling=TRUE)。这是否意味着即使不总是使用R API分配内存,该Rprof方法data.table仍然适用?
如果Rprof(memory.profiling=TRUE)实际上不是该工作的正确工具,那是什么?
会ssh.utils::mem.usage工作吗?
我有一个data.table my.data.table和一个字符向量i(长度为1)对应于一个colname my.data.table.使用i,我想提取相应的列my.data.table作为不是类data.table或向量的向量data.frame.
我该怎么做?
> my.data.table <- data.table(a=1:2,b=2:3)
> i <- "a"
> class(my.data.table[,i,with=FALSE])
[1] "data.table" "data.frame"
> as.vector(my.data.table[,i,with=FALSE]) ##does not work
a
1: 1
2: 2
> is.vector(as.vector(my.data.table[,i,with=FALSE])) ##strange behavior
[1] FALSE
>
Run Code Online (Sandbox Code Playgroud)
我假设有一种方法可以使用with=FALSE和进行eval(i, <env>),j但我无法弄明白.
我有一个分类轴,我想在该分类变量中直观地分离组。我不想刻面,因为它占用了太多空间并且视觉上不那么干净。
这是我想要的一个可视化示例,它涉及一些乏味的黑客攻击(将用于间距的非数据条目的 alpha 设置为 0)。
library(ggplot2)
dd <- data.frame(x=factor(c(1,-1,2:10),levels=c(1,-1,2:10)), y=c(1,2,2:10), hidden=as.factor(c(0,1,rep(0,9))))
ggplot(data=dd,aes(x=x,y=y,alpha=hidden)) +
geom_point() + scale_alpha_manual(values=c("1"=0,"0"=1)) +
scale_x_discrete(breaks=c(1:10))
Run Code Online (Sandbox Code Playgroud)
我希望能够使用以下数据结构(其中变量“组”决定了间距发生的位置):
dd2 <- data.frame(x=factor(1:10,), y=c(1:10), groups=c("A",rep("B",9)))
Run Code Online (Sandbox Code Playgroud)

我需要在大约 150K 行的数据帧上运行循环。但是,循环需要检查每一行并检查一个检查数据集中每隔一行的条件。我的代码对于玩具数据集运行良好,它产生正确的值,但对于我的实际数据集来说太慢了。我让它运行了几个小时,但它仍然没有完成。所以我希望有人能更好地了解如何解决这个问题。
#R version 3.5.1 Windows 64-bit
#Example dataset
my_df <- data.frame("PERSON" = c("A","A","A","B","A","A","B"),
"DATE_START" = c("2019-01-15","2019-01-10","2019-01-20","2019-01-19","2018-12-20","2018-03-03","2019-05-01"),
"DATE_FINISH" = c("2019-01-30","2019-01-18","2019-02-05","2019-01-23","2019-02-10","2018-04-01","2019-06-06")
)
#Each row is a task that the assigned person is working on
my_df
PERSON DATE_START DATE_FINISH
1 A 2019-01-15 2019-01-30
2 A 2019-01-10 2019-01-18
3 A 2019-01-20 2019-02-05
4 B 2019-01-19 2019-01-23
5 A 2018-12-20 2019-02-10
6 A 2018-03-03 2018-04-01
7 B 2019-05-01 2019-06-06
Run Code Online (Sandbox Code Playgroud)
我想知道的是,对于第 1 行,A 的开始日期和完成日期之间还有多少其他任务重叠?(包括其所在的行)
所以我正在寻找的答案是
PERSON DATE_START DATE_FINISH NUMBER_OF_TASKS
1 A 2019-01-15 2019-01-30 4 …Run Code Online (Sandbox Code Playgroud)