小编Sam*_*rke的帖子

根据包含列名的变量从不同列中选择值

我有一个像这样的data.table:

col1   col2   col3  new  
1       4     55    col1 
2       3     44    col2
3       34    35    col2
4       44    87    col3
Run Code Online (Sandbox Code Playgroud)

我想填充另一列matched_value,其中包含列中给出的相应列名称中的值new:

col1   col2   col3  new    matched_value
1       4     55    col1        1
2       3     44    col2        3
3       34    35    col2        34
4       44    87    col3        87 
Run Code Online (Sandbox Code Playgroud)

例如,在第一行中,值为new"col1",因此matched_value取值col1为1,即1.

如何在一个非常大的data.table上有效地在R中做到这一点?

r data.table

9
推荐指数
1
解决办法
1452
查看次数

在knitr中打印动态大小的图表列表

我希望能够在knitr中打印出非预定的情节列表.我能够做到这一点,但也有留下来化解一些皱纹.即:

1)如何在每个绘图之前的每个页面上抑制列表索引(如[[2]])?使用echo = FALSE不会做任何事情.

2)是否可以在渲染时为每个绘图设置大小?我已经尝试在块之外设置一个大小变量,但这只允许我使用一个值而不是每个绘图的不同值.

我问这是一个问题,因为他们似乎在讲同一课,即制作一份情节清单.

一些示例代码:

\documentclass{article}
\usepackage[margin=.5in, landscape]{geometry}
\begin{document}

<<diamond_plots, echo = FALSE, results = 'hide'>>==
library(ggplot2)

diamond_plot = function(data, cut_type){
  ggplot(data, aes(color, fill=cut)) + 
    geom_bar() +
    ggtitle(paste("Cut:", cut_type, sep = ""))
}

cuts = unique(diamonds$cut)
plots = list()
for(i in 1:length(cuts)){
    data = subset(diamonds, cut == cuts[i])
    plots[[i]] = diamond_plot(data, cuts[i])
}
height = 3
@

<<print_plots, results='asis', echo=FALSE,  fig.width=10, fig.height=height>>=
plots
@
\end{document}
Run Code Online (Sandbox Code Playgroud)

这些图的PDF看起来像这样:

在此输入图像描述

r ggplot2 knitr

9
推荐指数
1
解决办法
1173
查看次数

用ggplot2中的geom_smooth绘制虚线回归线

我在ggplot2中有一个简单的图,想要添加一个虚线回归线.到目前为止,我有:

library(ggplot2)
ggplot(mtcars, aes(x = hp, y = mpg)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  theme_bw()
Run Code Online (Sandbox Code Playgroud)

哪个返回我想要的,但是用实线表示:

带有回归线的散点图

我想让这条线破灭.我想我应该使用,scale_linetype_manual()但我的尝试一直是hacky.

一个简单的问题,但我找不到重复.

r ggplot2

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

R基于平等以外的条件合并

我有一个类似于以下内容的数据框:

date            minutes_since_midnight   value
2015-01-01      50                       2
2015-01-01      60                       1.5
2015-01-02      45                       3.3
2015-01-03      99                       5.5
Run Code Online (Sandbox Code Playgroud)

和另一个看起来像这样的数据框架

date        minutes_since_midnight   other_value
2015-01-01  55                       12
2015-01-01  80                       33
2015-01-02  45                       88
Run Code Online (Sandbox Code Playgroud)

我想要做的是添加另一列于第一数据帧,这是布尔值在所述第二数据帧中是否存在在相等的值的行日期列,然后一个minutes_since_midnight其是小于或等于所述minutes_since_midnight从第一个数据框.因此,对于上面的示例数据,我们得到:

date        minutes_since_midnight    value  has_other_value
2015-01-01  50                        2      False
2015-01-01  60                        1.5    True
2015-01-02  45                        3.3    True
2015-01-03  99                        5.5    False
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

希望这是有道理的,

提前致谢

merge r dataframe

8
推荐指数
2
解决办法
5423
查看次数

在R中解决任务调度或bin-packing优化

我有一个优化问题.这是一个包含20个部分的产品(生产顺序无关紧要).我有3台类似的机器可以生产所有20个零件.

我用分钟表示了20个部分(即生产第一部分需要3分钟,生产第二部分需要75分钟等)

ItemTime<-c(3,75,55,12,45,55,11,8,21,16,65,28,84,3,58,46,5,84,8,48)
Run Code Online (Sandbox Code Playgroud)

因此生产1种产品需要730分钟.

sum(ItemTime)
Run Code Online (Sandbox Code Playgroud)

目的是通过将好的物品分配给三台机器来最小化一种产品的生产.

sum(ItemTime/3)
Run Code Online (Sandbox Code Playgroud)

所以实际上我需要尽可能接近243.333分钟(730/3)

可能性的数量巨大3 ^ 20

我想有许多不同的最佳解决方案.我希望R给我所有这些.我不需要知道需要机器1 2和3的总时间:我还需要知道给机器1,机器2和机器3提供哪些物品.

或者,如果它太长,我想选择一个尽可能合理的样本而不重复......

我可以用R语言解决我的问题吗?

optimization r knapsack-problem resource-scheduling bin-packing

7
推荐指数
3
解决办法
4041
查看次数

当我有唯一的名字时,tidyr :: gather()会出错

我有来自tidyr包的gather()函数的问题.

sample
# A tibble: 5 × 6
  market_share      Y2012      Y2013      Y2014      Y2015      Y2016
         <chr>      <dbl>      <dbl>      <dbl>      <dbl>      <dbl>
1          KAB 0.23469425 0.23513725 0.23187590 0.22940831 0.22662625
2          BGD 0.21353096 0.21352769 0.20910574 0.20035900 0.19374223
3          NN 0.16891699 0.16204919 0.16272993 0.16388675 0.16154017
4         OG 0.07648682 0.07597078 0.07945966 0.07780233 0.08069057
5         Ha 0.05092648 0.05480555 0.06434457 0.07127716 0.08054208
Run Code Online (Sandbox Code Playgroud)

如果我尝试:

sample2 <- gather(sample, market_share, period, Y2012:Y2016)
Error: Each variable must have a unique name.
Problem variables: 'market_share'
Run Code Online (Sandbox Code Playgroud)

但是,每个变量似乎都有一个唯一的名称.

Ha  KAB  BGD  NN OG 
   1 …
Run Code Online (Sandbox Code Playgroud)

r tidyr

7
推荐指数
1
解决办法
6391
查看次数

在 GitHub Actions .yaml 中为 R 包配置 codecov 令牌

我正在尝试为 GitHub Actions 将运行的公共 R 包设置 codecov 监控covr::codecov。我正在查看这个 .yaml 示例(来源):

  - name: Test coverage
    if: matrix.r == '3.6'
    run: |
      Rscript -e 'remotes::install_github("r-lib/covr@gh-actions")'
      Rscript -e 'covr::codecov(token = "${{secrets.CODECOV_TOKEN}}")'
Run Code Online (Sandbox Code Playgroud)

将我的 codecov 令牌放在 .yaml 文件中代替上述示例的位置对我来说安全CODECOV_TOKEN吗?

r codecov github-actions

7
推荐指数
1
解决办法
651
查看次数

如何从计数向量计算百分比

我有一个看起来像这样的data.frame:

> dat <- data.frame(Operation = c("Login", "Posted", "Deleted"), `Total Count` = c(5, 25, 40), check.names = FALSE)
> dat
  Operation Total Count
1     Login           5
2    Posted          25
3   Deleted          40
Run Code Online (Sandbox Code Playgroud)

我想计算每个操作的百分比,例如,操作的百分比Login.我希望得到如下结果:

  Operation Total Count Percentage
1     Login           5 0.07142857
2    Posted          25 0.35714286
3   Deleted          40 0.57142857
Run Code Online (Sandbox Code Playgroud)

由于计数已经汇总,table()不起作用:

> table(dat$`Total Count`)

 5 25 40 
 1  1  1 
Run Code Online (Sandbox Code Playgroud)

r percentage

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

如何使用字符值连接/合并两个表?

我想基于名字,姓氏和年份组合两个表,并创建一个新的二进制变量,指示表1中的行是否存在于第二个表中.

第一张桌子是一个赛季NBA球员某些属性的面板数据集:

   firstname<-c("Michael","Michael","Michael","Magic","Magic","Magic","Larry","Larry")
   lastname<-c("Jordan","Jordan","Jordan","Johnson","Johnson","Johnson","Bird","Bird")
   year<-c("1991","1992","1993","1991","1992","1993","1992","1992")

   season<-data.frame(firstname,lastname,year)


    firstname   lastname        year
  1 Michael      Jordan         1991
  2 Michael      Jordan         1992
  3 Michael      Jordan         1993
  4 Magic        Johnson        1991
  5 Magic        Johnson        1992
  6 Magic        Johnson        1993
  7 Larry        Bird           1992
  8 Larry        Bird           1992
Run Code Online (Sandbox Code Playgroud)

第二个data.frame是选择参加全明星赛的NBA球员的一些属性的面板数据集:

   firstname<-c("Michael","Michael","Michael","Magic","Magic","Magic")
   lastname<-c("Jordan","Jordan","Jordan","Johnson","Johnson","Johnson")
   year<-c("1991","1992","1993","1991","1992","1993")

    ALLSTARS<-data.frame(firstname,lastname,year)



     firstname  lastname    year
  1 Michael     Jordan    1991
  2 Michael     Jordan    1992
  3 Michael     Jordan    1993
  4 Magic       Johnson   1991
  5 Magic       Johnson   1992
  6 Magic       Johnson   1993
Run Code Online (Sandbox Code Playgroud)

我想要的结果如下:

  firstname lastname    year    allstars

   1    Michael …
Run Code Online (Sandbox Code Playgroud)

r

6
推荐指数
1
解决办法
427
查看次数

检查现有CRAN包中是否使用了函数名称

我正在创建一个我计划提交给CRAN的R包.如何检查我的任何函数名称是否与CRAN上已有的函数名称冲突?在我的软件包上市之前,更改函数名称仍然很容易,我希望成为一个好公民,尽可能避免冲突.

例如,包MASS和dplyr都具有称为"选择"的功能.我想避免那种碰撞.

r cran

6
推荐指数
1
解决办法
276
查看次数