我有三个ExperimentCohort
因素确定的学生群体.对于每个学生,我有一个LetterGrade
,也是一个因素.我想LetterGrade
为每个人绘制一个类似直方图的条形图ExperimentCohort
.运用
ggplot(df, alpha = 0.2,
aes(x = LetterGrade, group = ExperimentCohort, fill = ExperimentCohort))
+ geom_bar(position = "dodge")
Run Code Online (Sandbox Code Playgroud)
让我非常接近,但这三个ExperimentCohorts
学生的数量并不相同.为了在更均匀的场上比较这些,我希望y轴是每个字母等级的队列中的比例.到目前为止,还没有计算这个比例,并在绘图之前将其放在一个单独的数据框中,我还没有找到办法做到这一点.
SO和其他地方的类似问题的每个解决方案都涉及aes(y = ..count../sum(..count..))
,但sum(.. count ..)在整个数据帧中执行,而不是在每个队列中执行.有人有建议吗?这是创建示例数据帧的代码:
df <- data.frame(ID = 1:60,
LetterGrade = sample(c("A", "B", "C", "D", "E", "F"), 60, replace = T),
ExperimentCohort = sample(c("One", "Two", "Three"), 60, replace = T))
Run Code Online (Sandbox Code Playgroud)
谢谢.
可能重复:
R从依赖项中禁止startupMessages
我读过关于使用sink("NUL")
/的内容sink("/dev/null")
,但是他们都没有解决我遇到的问题.即使我包裹library()
在命令中sink("NUL")
和sink()
,我以RSCRIPT呼叫输出,我不希望看到的信息的所有方式:
Loading required package: Matrix
Loading required package: methods
Loading required package: lattice
Loaded glmnet 1.8
Loading required package: MASS
Loading required package: lme4
Attaching package: 'lme4'
The following object(s) are masked from 'package:stats':
AIC, BIC
Loading required package: R2WinBUGS
Loading required package: coda
Attaching package: 'coda'
The following object(s) are masked from 'package:lme4':
HPDinterval
Loading required package: abind
Loading required package: foreign
arm (Version 1.5-05, built: 2012-6-6) …
Run Code Online (Sandbox Code Playgroud) 一直在使用SO作为我工作的资源.感谢您召集这样一个伟大的社区.
我正在尝试做一些有点复杂的事情,我现在能想到的唯一方法就是使用一对嵌套的for循环(我知道在R中不赞成)......我有三百万的记录 - 奇数课程注册:学生UserID与CourseID配对.在每一行中,都有一堆数据,包括开始/结束日期和分数等等.我需要做的是,对于每次注册,计算该用户在注册课程之前所参加的课程的平均分数.
我用于for循环的代码如下:
data$Mean.Prior.Score <- 0
for (i in as.numeric(rownames(data)) {
sum <- 0
count <- 0
for (j in as.numeric(rownames(data[data$UserID == data$UserID[i],]))) {
if (data$Course.End.Date[j] < data$Course.Start.Date[i]) {
sum <- sum + data$Score[j]
count <- count + 1
}
}
if (count != 0)
data$Mean.Prior.Score[i] <- sum / count
}
Run Code Online (Sandbox Code Playgroud)
我很确定这会起作用,但它的运行速度非常慢...我的数据框有超过三百万行,但经过10分钟的好处后,外部循环只运行了850条记录.这似乎比时间复杂性所暗示的要慢,特别是考虑到每个用户平均只有5或6个课程.
哦,我应该提一下,我在运行循环之前用as.POSIXct()转换了日期字符串,所以日期比较步骤不应该太慢......
必须有更好的方法来做到这一点...任何建议?
编辑:根据mnel的要求......终于得到dput
了很好的发挥.不得不补充一下control = NULL
.这是'tis:
structure(list(Username = structure(1:20, .Label = c("100225",
"100226", "100228", "1013170", "102876", "105796", "106753",
"106755", "108568", "109038", "110150", "110200", …
Run Code Online (Sandbox Code Playgroud) 我有一个很大的数据框,有两个用于课程和用户的ID列,我需要将每个课程分成一个数据框,以进行进一步的分析/子集化.在从每个单独的课程数据帧中删除了很多行之后,我需要将它们重新组合在一起.
我把它分开了,你猜对了,split
这就像我需要它一样.然而,未分裂比我想象的更难.R文档说" unsplit
反转了" 的效果split
,但到目前为止我在网上的阅读表明,当拆分列表的元素本身是数据帧时,情况并非如此.
我该怎么做才能重新加入我修改过的dfs?
我正在编写一个函数,它使用kmeans来确定bin宽度,将连续测量(预测概率)转换为整数(3个bin中的一个).我偶然发现了一个边缘情况,我的算法可以(正确地)预测整个集合的相同概率,我想处理这种情况.我正在以下列方式使用rattle
包的binning()
功能:
btsKmeansBin <- function(x, k = 3, default = c(0, 0.3, 0.5, 1)) {
result <- binning(x, bins = k, method = "kmeans", ordered = T)
bins <- attr(result, "breaks")
attr(bins, "names") <- NULL
bins <- bins[order(bins)]
bins[1] <- 0
bins[length(bins)] <- 1
return(bins)
}
Run Code Online (Sandbox Code Playgroud)
打开此函数x <- c(.5,.5,.5,.5,.5,.5)
,您将在该order(bins)
步骤中收到错误,因为bins
它将为NULL,因此不是向量.
显然,如果x
只有一个不同的值,那么kmeans就不行.在这种情况下,我想返回default
bin分区.发生这种情况时,binning
问题"警告:不考虑变量".所以我想用它tryCatch
来处理这个警告,但是result <- ...
用以下代码包围这行并不像我期望的那样工作:
...
tryCatch({
result <- binning(x, bins = k, method …
Run Code Online (Sandbox Code Playgroud)