我有一个像这样的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中做到这一点?
我希望能够在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看起来像这样:
我在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.
一个简单的问题,但我找不到重复.
我有一个类似于以下内容的数据框:
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)
我怎样才能做到这一点?
希望这是有道理的,
提前致谢
我有一个优化问题.这是一个包含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
我有来自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) 我正在尝试为 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
吗?
我有一个看起来像这样的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) 我想基于名字,姓氏和年份组合两个表,并创建一个新的二进制变量,指示表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) 我正在创建一个我计划提交给CRAN的R包.如何检查我的任何函数名称是否与CRAN上已有的函数名称冲突?在我的软件包上市之前,更改函数名称仍然很容易,我希望成为一个好公民,尽可能避免冲突.
例如,包MASS和dplyr都具有称为"选择"的功能.我想避免那种碰撞.
r ×10
ggplot2 ×2
bin-packing ×1
codecov ×1
cran ×1
data.table ×1
dataframe ×1
knitr ×1
merge ×1
optimization ×1
percentage ×1
tidyr ×1