小编dww*_*dww的帖子

plotly中的堆叠条形图:如何控制每个堆叠中条形的顺序

我试图在 plotly 中订购堆积条形图,但它不尊重我在数据框中传递它的顺序。

最好使用一些模拟数据来显示:

library(dplyr)
library(plotly)
cars <- sapply(strsplit(rownames(mtcars), split = " "), "[", i = 1)
dat <- mtcars
dat <- cbind(dat, cars, stringsAsFactors = FALSE)
dat <- dat %>% 
         mutate(carb = factor(carb)) %>%
         distinct(cars, carb) %>% 
         select(cars, carb, mpg) %>% 
         arrange(carb, desc(mpg))
plot_ly(dat) %>% 
  add_trace(data = dat, type = "bar", x = carb, y = mpg, color = cars) %>%  
  layout(barmode = "stack") 
Run Code Online (Sandbox Code Playgroud)

结果图不遵守顺序,我希望最大 mpg 的汽车堆叠在每个气缸组的底部。有任何想法吗?

在此处输入图片说明

r plotly

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

稀疏矩阵乘法与 NA

如果数据中有 ,则NA对R 中的稀疏矩阵执行矩阵乘法会产生与对相同矩阵的密集形式执行的相同操作不同的结果。

一些数据来证明:

library(Matrix)
set.seed(123)
m1  <- Matrix(data=sample(c(0,0,0,0,0,1,2,NA),25, T), ncol = 5, nrow = 5, sparse = F)
m2  <- Matrix(data=sample(c(0,0,0,0,0,1,2,NA),25, T), ncol = 5, nrow = 5, sparse = F)
sm1 <- Matrix(m1, sparse = T)
sm2 <- Matrix(m2, sparse = T)
Run Code Online (Sandbox Code Playgroud)

现在如果我们这样做

m1 %*% m2

# 5 x 5 Matrix of class "dgeMatrix"
#      [,1] [,2] [,3] [,4] [,5]
# [1,]   NA   NA   NA   NA   NA
# [2,]    2   NA    0    0    2
# …
Run Code Online (Sandbox Code Playgroud)

r matrix sparse-matrix

5
推荐指数
0
解决办法
768
查看次数

ggplot boxplot - 具有对数轴的晶须长度

我正在尝试使用 ggplot2 创建带有对数轴的水平箱线图。但是,胡须的长度是错误的。

一个最小的可重现示例:

一些数据

library(ggplot2)
library(reshape2)
set.seed(1234)
my.df <- data.frame(a = rnorm(1000,150,50), b = rnorm(1000,500,150))
my.df$a[which(my.df$a < 5)] <- 5
my.df$b[which(my.df$b < 5)] <- 5
Run Code Online (Sandbox Code Playgroud)

如果我使用基本 R 绘制此图boxplot(),一切都很好

boxplot(my.df, log="x", horizontal=T)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但有了 ggplot,

my.df.long <- melt(my.df, value.name = "vals")
ggplot(my.df.long, aes(x=variable, y=vals)) +
  geom_boxplot() +
  scale_y_log10(breaks=c(5,10,20,50,100,200,500,1000), limits=c(5,1000)) +
  theme_bw() + coord_flip()
Run Code Online (Sandbox Code Playgroud)

我得到了这个图,其中晶须的长度错误(例如,请参见晶须下方有许多额外的异常值,而上方没有异常值)。

在此输入图像描述

请注意,如果没有对数轴,ggplot 的胡须长度正确

ggplot(my.df.long, aes(x=variable, y=vals)) +
  geom_boxplot() +
  theme_bw() + coord_flip()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何使用 ggplot 和正确长度的胡须生成水平对数箱线图?优选地,晶须延伸至 IQR 的 1.5 倍。

注意,如此所述。可以使用coord_trans(y = "log10")代替,这将导致在转换数据 …

r ggplot2 boxplot

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

Stargazer的Rmarkdown:如果align设置为TRUE,LaTeX会出错

我正在使用stargazer,我想LaTeX为一个简单的lm对象生成一个输出.问题是我无法设置align = TRUE而不会收到错误.

LaTeX错误:\浮点外的标题.

我查了一下,消息说错了.将Stargazer输出直接复制到Latex文档中可以正常工作.将其复制到rmarkdown文档中会产生相同的错误(这并不奇怪,但我只是想确定).在玩了一下后,我发现rmarkdown如果重要的星(*)被移除(或精确到^{***}),它就会起作用.但是,stargazer默认情况下会生成它们,它们也是输出的重要部分.

有没有办法让它发挥作用?

---
header-includes:
- \usepackage{dcolumn}
output: pdf_document
---

## R Markdown
```{r, include = FALSE}
library(stargazer)
df <- data.frame(x = 1:10 + rnorm(100),
                 y = 1:10 + rnorm(100))
reg <- lm(y ~ x, data = df)
```

```{r, results='asis', echo = FALSE}
stargazer(reg, header = FALSE, align = TRUE)
```
Run Code Online (Sandbox Code Playgroud)

r pandoc knitr r-markdown stargazer

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

在 Shiny 中,使用来自用户输入的新值更新 DataTable

我正在编写一个闪亮的应用程序,它有一个表(使用DT::renderDataTable),用户可以从中选择一行。但我希望用户也能够添加新行,如果他们想要的东西不在表中。我正在使用输入控件供用户输入新数据,并且我有一个操作按钮,如果按下该按钮,应根据输入值在表中创建新的数据行。但是按下按钮不会更新表格。

一个最小的例子:

library(shiny)
library(DT)
mydata = data.frame(id=letters[1:5], val=sample(10,5,T))

ui = fluidPage(dataTableOutput("table"),
               textInput('NewID', 'Enter new ID'),
               numericInput('NewVal', 'Enter new val', 1),
               actionButton("goButton", "Update Table"))

server = function(input,output){
  output$table = renderDataTable(mydata)
  update = eventReactive(input$goButton, {
    newrow = data.frame(id = input$NewID, val = input$NewVal)
    mydata = rbind(mydata, newrow)
  })
}

shinyApp(ui,server)
Run Code Online (Sandbox Code Playgroud)

显然,这是解决这个问题的错误方法。我已经尝试了各种组合的包装renderDataTable和代码来更新mydata里面renderUI, observeand reactive,但我找不到正确的方法来做到这一点。

这是我的第一个闪亮的应用程序,所以可能有一个我不太理解的基本概念。什么是正确的方法?

r shiny dt

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

如果满足条件,如何向上一行添加值

我想要做的是如果列b中的行等于2,那么我想在列a中的前一行的值中添加3.如果条件不满足,那么我不希望前一行值改变.当我尝试这个代码但是R正在添加到后续行.并且我替换-1行引用并不重要,它总是添加到后续行.

df$a[-1] <- ifelse(df$b == 2, df$a[-1] + 3, df$a[-1])

Have                               Want
a b                                a b
0 1                                0 1
1 3                                4 3
2 2                                2 2
2 4                                2 4
4 5                                4 5
Run Code Online (Sandbox Code Playgroud)

if-statement row r

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

如何在 R 中对条形图的订单数据进行“分组”?

我正在研究生物信息学,我需要输出一个包含祖先结果的图表(条形图)。通常,这些图表是通过将人群分组在一起来绘制的。完成的方法是,您只需绘制不同假定人群(此处为 4)的 Q 分数(下面的数据)的条形图。

问题是我用来ord = tbl[order(tbl$V1,tbl$V2,tbl$V3),]对我的值进行排序。这样我就看到一些条形图没有聚集在正确的群体中(参见图中应与第一组聚集在一起的橙色条形图)。因此,我想知道如何按颜色(代表人口)对条形进行聚类。

有办法解决这个问题吗?

barplotgeno <- function(tbl, # To plot the Q scores (ancestry). 
                        col = c("#FF3030", # nice colors
                                "#9ACD31",
                                "#1D90FF",
                                "#FF8001"), 
                        pdf = TRUE,
                        pdf.path.name = "~/Desktop/Stacked_barplot.pdf") {

  ord = tbl[order(tbl$V1,tbl$V2,tbl$V3),]

  if(pdf) {
    pdf(pdf.path.name, width = 11, height = 8.5)
  bp = barplot(t(as.matrix(ord[,1:dim(ord)[2]-1])), 
               space = c(0.2),#space = c(0),# Space between the bars
               col=col, #rainbow(4),
               xlab="Individual #", 
               ylab="Ancestry", xaxt="n",
               border=NA, main = "Stacked barplot from ADMIXTURE analysis")
  labs <- row.names(ord)
  text(cex=0.5, x=bp+1, y=-0.03, …
Run Code Online (Sandbox Code Playgroud)

sorting plot r bar-chart

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

用 R 中指定单词旁边的单词过滤所有行

我有一列包含字符串内容

temp <- c(NA, NA, "grocery pantry all offers", NA, "grocery offers today low price", 
"grocery offers today low price", "tide soap", "tide soap bar", 
"tide detergent powders 2kg", NA, "tide", "tide detergent powders 2kg", 
"liquid detergent tide brand")
Run Code Online (Sandbox Code Playgroud)

我的目的是用紧挨着 Tide 的单词创建一个 bigram。为此,我需要过滤掉靠近潮汐的单词。无论是左侧还是右侧。对于上述输出中的 ex 将是

tide soap
tide soap
tide detergent
tide detergent
detergent tide
tide brand
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

r tidyr tidyverse tidytext

5
推荐指数
2
解决办法
246
查看次数

当文件名可变时,将文件中的代码包含到 RMarkdown 中

我想在 RMarkdown 中有一个 R 块,其中包含来自外部文件的代码。

我想包含该文件,而不是直接嵌入其内容,因为外部文件包含在各种项目和脚本之间共享的代码,并且我想确保每个程序都使用最新版本。该code = ...块选项用于本作。

如果我编织整个文档,以下方法可以正常工作。但是,如果我尝试在 Rstudio 中运行各个块(根据开发过程中的要求),我会收到错误消息"Error in readLines(include_file) : object 'include_file' not found"

我如何让它工作,以便我可以从 Rstudio 中运行块?

可重现的例子:

首先创建一些包含文件

write_lines("x = 1", 'include_1.r')
write_lines("x = 2", 'include_2.r')
write_lines("x = 3", 'include_3.r')
write_lines("x = 4", 'include_4.r')
Run Code Online (Sandbox Code Playgroud)

然后将以下内容放入 .Rmd 文件中

---
title: "Untitled"
output: html_document
---

```{r setup}
knitr::opts_chunk$set(echo = TRUE)
include_file = list.files(pattern = '^include_.+[Rr]$')
include_file = include_file[which.max(file.info(include_file)$mtime)]
```

I want to embed an R code from a file like this:

```{r, …
Run Code Online (Sandbox Code Playgroud)

r rstudio r-markdown

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

为什么 is.recursive 对于函数返回 TRUE

根据帮助,is.recursive(x)“如果 x 具有递归(类似列表)结构,则返回 TRUE,否则返回 FALSE”。我很困惑为什么当 x 是函数时它返回 TRUE 。例如:

is.recursive(mean)
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)

但函数似乎不能在任何有意义的意义上递归,特别是因为它们甚至不能子集:

mean[[1]]
# Error in mean[[1]] : object of type 'closure' is not subsettable
Run Code Online (Sandbox Code Playgroud)

这是 R 源代码中的疏忽,还是有合理的理由认为函数应该被视为递归?

r

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