我正在尝试使用ggplot2创建一个日志正常y比例的性能图表.不幸的是,我不能像基本情节函数那样产生好的滴答声.
这是我的例子:
library(ggplot2)
library(scales)
# fix RNG
set.seed(seed = 1)
# simulate returns
y=rnorm(999, 0.02, 0.2)
# M$Y are the cummulative returns (like an index)
M = data.frame(X = 1:1000, Y=100)
for (i in 2:1000)
M[i, "Y"] = M[i-1, "Y"] * (1 + y[i-1])
ggplot(M, aes(x = X, y = Y)) + geom_line() + scale_y_continuous(trans = log_trans())
Run Code Online (Sandbox Code Playgroud)
产生难看的蜱:

我也尝试过:

ggplot(M, aes(x = X, y = Y)) + geom_line() +
scale_y_continuous(trans = log_trans(), breaks = pretty_breaks())
Run Code Online (Sandbox Code Playgroud)
如何获得与默认绘图函数相同的中断/刻度:
plot(M, type = "l", …Run Code Online (Sandbox Code Playgroud) 我有一个包含51608个变量(列)的9个样本(行)的数据集,每当我尝试缩放它时,我都会收到错误:
这很好用
pca = prcomp(pca_data)
Run Code Online (Sandbox Code Playgroud)
然而,
pca = prcomp(pca_data, scale = T)
Run Code Online (Sandbox Code Playgroud)
给
> Error in prcomp.default(pca_data, center = T, scale = T) :
cannot rescale a constant/zero column to unit variance
Run Code Online (Sandbox Code Playgroud)
显然,发布一个可重复的例子有点困难.任何想法可能是什么交易?
寻找恒定列:
sapply(1:ncol(pca_data), function(x){
length = unique(pca_data[, x]) %>% length
}) %>% table
Run Code Online (Sandbox Code Playgroud)
输出:
.
2 3 4 5 6 7 8 9
3892 4189 2124 1783 1622 2078 5179 30741
Run Code Online (Sandbox Code Playgroud)
所以没有恒定的列.与NA相同 -
is.na(pca_data) %>% sum
>[1] 0
Run Code Online (Sandbox Code Playgroud)
这很好用:
pca_data = scale(pca_data)
Run Code Online (Sandbox Code Playgroud)
但之后两者仍然给出完全相同的错误:
pca = prcomp(pca_data)
pca = …Run Code Online (Sandbox Code Playgroud) 过滤data.frame以获得大小为5的组的最佳方法是什么?
所以我的数据如下:
require(dplyr)
n <- 1e5
x <- rnorm(n)
# Category size ranging each from 1 to 5
cat <- rep(seq_len(n/3), sample(1:5, n/3, replace = TRUE))[1:n]
dat <- data.frame(x = x, cat = cat)
Run Code Online (Sandbox Code Playgroud)
我能想到的dplyr方式是
dat <- group_by(dat, cat)
system.time({
out1 <- dat %>% filter(n() == 5L)
})
# user system elapsed
# 1.157 0.218 1.497
Run Code Online (Sandbox Code Playgroud)
但这很慢...... dplyr有更好的方法吗?
到目前为止,我的解决方案解决方案如下:
system.time({
all_ind <- rep(seq_len(n_groups(dat)), group_size(dat))
take_only <- which(group_size(dat) == 5L)
out2 <- dat[all_ind %in% take_only, ]
})
# user system elapsed …Run Code Online (Sandbox Code Playgroud) 我有以下形式的数据:
set.seed(1234)
data <- data.frame(cbind(runif(40,0,10), rep(seq(1,20,1), each = 2)))
data <- data[sample(nrow(data)),]
colnames(data) <- c("obs","subject")
head(data)
obs subject
1.5904600 12
8.1059855 13
5.4497484 6
0.3999592 12
2.5880982 19
2.6682078 9
... ...
Run Code Online (Sandbox Code Playgroud)
假设我只有两个观察点(列"障碍")按主题(列"主题",其中主题从1到20编号).
我想按"主题"列的值"分组"行.更准确地说,我想按主题"订购"数据,但保留上面显示的顺序.因此,最终数据将是这样的:
obs subject
1.5904600 12
0.3999592 12
8.1059855 13
2.3656473 13
5.4497484 6
7.2934746 6
Run Code Online (Sandbox Code Playgroud)
有任何想法吗 ?我想到可能会识别出与主题相对应的每一行which:
which(data$subject==x)
Run Code Online (Sandbox Code Playgroud)
然后rbind循环中的这些行,但我相信有一个更简单,更快的方法来做到这一点,不是吗?
在示例ggbiplot脚本图中有3组,如何更改标记颜色和形状?
library(ggbiplot)
data(wine)
wine.pca <- prcomp(wine, scale. = TRUE)
ggbiplot(wine.pca, obs.scale = 1, var.scale = 1, group=wine.class,
varname.size = 3, labels.size=3,
ellipse = TRUE, circle = TRUE) +
scale_color_discrete(name = '') +
geom_point(aes(colour=wine.class), size = 3) +
theme(legend.direction ='horizontal',
legend.position = 'top')
Run Code Online (Sandbox Code Playgroud) 我试图改变从BA,SLG到SLG,BA的方面的顺序.我发现了与此类似的问题,但我认为我的解决方案可能无法正常工作,因为我已经在excel中汇总了数据; 因此,我的数据框可能不同.无论如何,我试图实现这个无济于事:
df2 <- factor(df, levels = c("SLG","BA"))
Run Code Online (Sandbox Code Playgroud)
任何帮助解决这个问题将非常感激.
df <- read.table(textConnection(
'POS SLG BA
2B 0.4632 .23
3B 0.468652174 .24
SS 0.4146 .22
1B 0.472368421 .25
RF 0.462684211 .245
CF 0.4435 .225
LF 0.4474 .226
C 0.440875 .228
DH 0.508714286 .28'), header = TRUE,stringsAsFactors = FALSE)
library(micromapST)
library(ggplot2)
library(tidyr)
library(dplyr)
df$POS <- reorder(as.factor(df$POS), df$SLG)
dfx <- gather(df, group, data, SLG, BA)
row.names(df) <- NULL
theme_set(theme_grey() +
theme(plot.title = element_text(hjust=0.5,face='bold'),
axis.title.y = element_text(angle = 0, vjust = 0.5,face='bold'),
axis.title.x=element_text(face='bold'),
panel.background …Run Code Online (Sandbox Code Playgroud) 当我使用R运行lm()回归时,我从summary()获得“残差标准误差”。为什么每个观察值只有一个残留标准误差值而不是残留标准误差列表?
summary()中显示的该值的含义是什么?summary()中显示的“残留标准误差”是否为每个观察值的残留标准误差列表的平均值?谢谢。
Residual standard error: 0.8498 on 44848 degrees of freedom
(7940 observations deleted due to missingness)
Multiple R-squared: 0.4377, Adjusted R-squared: 0.4375
Run Code Online (Sandbox Code Playgroud)