小编Joe*_*Joe的帖子

使用ggplot2(动态非手动)的日志正常比例的漂亮刻度

我正在尝试使用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)

plot r ggplot2

40
推荐指数
4
解决办法
3万
查看次数

如何解决prcomp.default():无法将常量/零列重新调整为单位方差

我有一个包含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)

r matrix pca prcomp

13
推荐指数
3
解决办法
2万
查看次数

dplyr - 按组大小过滤

过滤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)

r subset filter dataframe dplyr

6
推荐指数
3
解决办法
2701
查看次数

如何在R中的数据帧的一列中将具有相同值的行配对

我有以下形式的数据:

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循环中的这些行,但我相信有一个更简单,更快的方法来做到这一点,不是吗?

group-by r dataframe

5
推荐指数
1
解决办法
200
查看次数

ggbiplot - 更改组颜色和标记

在示例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)

r pca ggbiplot

5
推荐指数
1
解决办法
5379
查看次数

R改变方面的顺序

我试图改变从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 facet ggplot2

4
推荐指数
2
解决办法
1万
查看次数

R中的lm()回归的summary()中“残余标准误差”的含义是什么?

当我使用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)

regression r lm

2
推荐指数
1
解决办法
181
查看次数

标签 统计

r ×7

dataframe ×2

ggplot2 ×2

pca ×2

dplyr ×1

facet ×1

filter ×1

ggbiplot ×1

group-by ×1

lm ×1

matrix ×1

plot ×1

prcomp ×1

regression ×1

subset ×1