我有一个类似于此的数据集
User Date Value
A 2012-01-01 4
A 2012-01-02 5
A 2012-01-03 6
A 2012-01-04 7
B 2012-01-01 2
B 2012-01-02 3
B 2012-01-03 4
B 2012-01-04 5
Run Code Online (Sandbox Code Playgroud)
我想创造一个Value尊重的滞后User.
User Date Value Value.lag
A 2012-01-01 4 NA
A 2012-01-02 5 4
A 2012-01-03 6 5
A 2012-01-04 7 6
B 2012-01-01 2 NA
B 2012-01-02 3 2
B 2012-01-03 4 3
B 2012-01-04 5 4
Run Code Online (Sandbox Code Playgroud)
我在循环中做得非常低效
df$value.lag1<-NA
levs<-levels(as.factor(df$User))
levs
for (i in 1:length(levs)) {
temper<- subset(df,User==as.numeric(levs[i])) …Run Code Online (Sandbox Code Playgroud) 考虑以下R函数定义,使用roxygen2进行记录(版本> = 5.0)
#' @title Test Bug
#' @author Daniel Egan
#' @param x
#' @return Nothing
#' @export
#' @examples
#' testFun(x)
testFun <- function(x){
#' Warning1'
return(TRUE)
}
Run Code Online (Sandbox Code Playgroud)
当使用devtools :: document()来记录它时,它会产生以下错误:
警告消息:
1:@examples [TestFun.R#8]:大括号或引号不匹配
请注意,"示例"部分中绝对没有不匹配的大括号或引号.是什么造成的?我该如何解决?
我试图合并一个大文件和一个较小的文件.我在R中读过 很多关于内存管理的帖子,并且无法找到解决它的非极端(去64位,上传到集群等)的方法.我已经尝试了一些bigmemory包,但未能找到解决方案.在我沮丧地举起双手之前,我以为我会在这里试试.
我正在运行的代码如下所示:
#rm(list=ls())
localtempdir<- "F:/Temp/"
memory.limit(size=4095)
[1] 4095
memory.size(max=TRUE)
[1] 487.56
gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 170485 4.6 350000 9.4 350000 9.4
Vcells 102975 0.8 52633376 401.6 62529185 477.1
client_daily<-read.csv(paste(localtempdir,"client_daily.csv",sep=""),header=TRUE)
object.size(client_daily)
>130MB
sbp_demos<-read.csv(paste(localtempdir,"sbp_demos",sep=""))
object.size(demos)
>0.16MB
client_daily<-merge(client_daily,sbp_demos,by.x="OBID",by.y="OBID",all.x=TRUE)
Error: cannot allocate vector of size 5.0 MB
Run Code Online (Sandbox Code Playgroud)
我想我在问这有什么巧妙的方法不涉及购买新硬件吗?
merge创建一个更大的对象.我应该放弃吗?bigmemory应该能够帮助解决这个问题吗?
任何指导都非常感谢.
详细信息:R版本2.13.1(2011-07-08)平台:i386-pc-mingw32/i386(32位)Intel 2 Duo Core @ 2.33GHz,3.48GB RAM
我有一个包装函数,我需要将可选参数传递给指定的子函数.但是有许多不同的可能子功能我无法预先指定它们.作为参考,子功能存在于环境等...考虑:
funInFun<- function (x, method, ...) {
method.out <- function(this.x, FUN, ...) {
FUN <- match.fun(FUN)
c <- FUN(this.x, ...)
return(c)
}
d <- method.out(x, method)
return(d)
}
data<-seq(1,10)
funInFun(data, mean) # Works
data<-c(NA,seq(1,10))
funInFun(data, mean, na.rm=TRUE) # Should remove the NA
funInFun(c(seq(1,10)), quantile, probs=c(.3, .6)) # Shoudl respect the probs option.
Run Code Online (Sandbox Code Playgroud) 关于R最令人沮丧的事情之一是难以使用名称,算法和直觉创建新的数据帧变量.
假设我有一个带有一些变量的数据帧,并希望在循环中基于它们创建新变量.例如,我想创建新变量,它们是现有变量的累积和,并且已命名df$var_cumul
temp<-as.data.frame(cbind(seq(0:10),seq(10:20)))
names(temp)<-c("x","y")
for (i in 1:ncol(temp)) {
vname<-names(temp)[i]
assign(paste("temp$",vname,"_cumul",sep=""),cumsum(contrs[,i]))
}
Run Code Online (Sandbox Code Playgroud)
没有我发现的作品.这可能是我定期与R最大的问题之一.
有一种简单直观的方法吗?
我需要创建一个函数(在R中):
- 给出N个可能的变量来赋予权重;
- 创建所有可能的权重(总计为100%);
- 受制于权重必须以P的倍数出现的约束(通常为1%)
显然,由于N和P是反向相关的 - 即我不能指定N = 7,并且P = 0.4.但是,我希望能够仅指定整数解,即P = 0.01.
很抱歉,如果这是一个众所周知的问题 - 我不是数学家,我使用我认识的术语进行了搜索,但没有发现任何足够接近的问题.
我发布了我写的代码,但是......它并不令人印象深刻或富有洞察力.
谢谢你的帮助!
我想gt在网格中或并排生成一组表对象。例如,下面的代码使用group_by参数来垂直分隔它们。但如果我希望它们并排分开怎么办?
mtcars2 <-
mtcars %>%
mutate(good_mpg = ifelse(mpg > 20, "Good mileage", "Bad mileage"),
car_name = row.names(.))
mtcars2 %>%
group_by(good_mpg) %>%
slice_max(order_by = hp, n=5) %>%
arrange(hp) %>%
select(car_name, hp) %>%
gt() %>%
data_color(columns = c("hp"),
colors = col_numeric(palette = "Blues",
domain = c(0, 400)))
Run Code Online (Sandbox Code Playgroud)
r ×7
combinations ×1
data.table ×1
dataframe ×1
for-loop ×1
function ×1
gt ×1
lag ×1
merge ×1
permutation ×1
r-markdown ×1
roxygen2 ×1
time-series ×1