小编Rei*_*ein的帖子

R:data.table count!每行NA

我试图计算每行不包含NA的列数,并将该值放入该行的新列中.

示例数据:

library(data.table)

a = c(1,2,3,4,NA)
b = c(6,NA,8,9,10)
c = c(11,12,NA,14,15)
d = data.table(a,b,c)

> d 
    a  b  c
1:  1  6 11
2:  2 NA 12
3:  3  8 NA
4:  4  9 14
5: NA 10 15
Run Code Online (Sandbox Code Playgroud)

我想要的输出将包括一个新列num_obs,其中包含每行非NA条目的数量:

    a  b  c num_obs
1:  1  6 11       3
2:  2 NA 12       2
3:  3  8 NA       2
4:  4  9 14       3
5: NA 10 15       2
Run Code Online (Sandbox Code Playgroud)

我现在已经阅读了好几个小时,到目前为止,我所提出的最好的是循环遍历行,我知道这在R或data.table中是不可取的.我相信有更好的方法可以做到这一点,请赐教.

我糟糕的方式:

len = (1:NROW(d))
for (n in …
Run Code Online (Sandbox Code Playgroud)

r data.table

12
推荐指数
2
解决办法
4236
查看次数

ggplot2使图例键填充透明

我正在尝试使用ggplot透明的图例键填充.我按照Hadley的ggplot2指南中的说明更改了图例键填充,但出于某种原因,当我将填充设置为透明时,它会填充灰色.即使我将图例键填充设置为白色,它仍会在最终图中显示为灰色.

这是一个例子:

library(ggplot2)

data1 = c(0,10, 11, 23, 33, 40, 41, 50, 59, 68, 76, 88, 90, 99)
data2 = c(2, 8, 10, 22, 39, 47, 49, 55, 62, 70, 76, 86, 88, 95)

df = data.frame(data1, data2)

(plot = ggplot() +
  geom_smooth(data=df, aes(data1, data2,colour="sample1"))+
  geom_abline(intercept=0, slope=1,linetype="dashed", color = "black")+
  scale_x_continuous(expand=c(0,0), limits=c(0,100)) + 
  scale_y_continuous(expand=c(0,0), limits=c(0,100))+
  theme_classic()+
  labs(y="data2", x="data1", 
       title="sample 1 data1 vs data2") +
  theme(plot.title = element_text(size=18, face="bold"),
        legend.key = element_rect(colour = "transparent", fill = "white"),
        legend.justification = c(1,0), legend.position …
Run Code Online (Sandbox Code Playgroud)

plot r ggplot2

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

R ggplot2 ggrepel - 在知道所有点的同时标记点的子集

我有一个相当密集的散点图,我用R'ggplot2'构建,我想用'ggrepel'标记一个点的子集.我的问题是我想在散点图中绘制所有点,但只用ggrepel标记一个子集,当我这样做时,ggrepel在计算放置标签的位置时没有考虑图上的其他点,这导致与图上其他点重叠的标签(我不想标记).

这是一个说明问题的示例图.

# generate data:
library(data.table)
library(stringi)
set.seed(20180918)
dt = data.table(
  name = stri_rand_strings(3000,length=6),
  one = rnorm(n = 3000,mean = 0,sd = 1),
  two = rnorm(n = 3000,mean = 0,sd = 1))
dt[, diff := one -two]
dt[, diff_cat := ifelse(one > 0 & two>0 & abs(diff)>1, "type_1",
                        ifelse(one<0 & two < 0 & abs(diff)>1, "type_2",
                               ifelse(two>0 & one<0 & abs(diff)>1, "type_3",
                                      ifelse(two<0 & one>0 & abs(diff)>1, "type_4", "other"))))]

# make plot
ggplot(dt, aes(x=one,y=two,color=diff_cat))+
  geom_point()
Run Code Online (Sandbox Code Playgroud)

没有标签的情节

如果我只绘制我想要标记的点的子集,那么ggrepel能够相对于其他点和标签以非重叠的方式放置所有标签.

ggplot(dt[abs(diff)>2 & (!diff_cat %in% …
Run Code Online (Sandbox Code Playgroud)

plot r ggplot2 ggrepel

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

ggplot:对齐多个多面图 - 各个不同尺寸的面

我试图将多个图与方面对齐.我的问题有些微不足道但是很顺利:我可以制作一个绘图,使绘图区域对齐,刻面本身对齐,但刻面条的宽度不一样.如果小平面的标签长度​​不同,则小平面条的大小应使文本可以适合小平面.到目前为止,我无法找到一种方法,在对齐多个图时使所有小平面条具有相同的宽度.

下面是我想要对齐的图表类型的示例以及我对齐它们的努力:

library(data.table)
library(ggplot2)
library(foreach)
library(stringr)
library(cowplot)

# example data to show how aligning faceted plots is not quite right
plotvars = c(paste0("plot1_var", 1:7), paste0("plot2_var",1:5), paste0("plot3_var",1:10))
data = 
  foreach(p=plotvars,.combine = "rbind") %do% {
    d = data.table(plot = rep(str_extract(p,pattern = "plot[[:digit:]]"),2),
               plot_variables = rep(p,2),
               fill_categories = c("fill1","fill2"),
               number = sample(1:1000, size = 2))
    d[, facet_variables := ifelse(plot=="plot1", 
                                  rep(sample(paste0("facet",1:3),size=1),2),
                                  ifelse(plot=="plot2",
                                         rep(sample(paste0("facet_title",1:3),size=1),2),
                                         ifelse(plot=="plot3",
                                                rep(sample(paste0("facet_title_longer",1:3),size=1),2),
                                                NA)))]
    d
  }

# function to make stacked barplots with facets + coord_flip
make_plot = function(data, plot_var) {
  ggplot(data[plot==plot_var], …
Run Code Online (Sandbox Code Playgroud)

r data-visualization ggplot2 gridextra cowplot

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

使用作为 bash 脚本参数传递的 glob 表达式

特尔;博士:

为什么不调用./myscript foo*myscript具有var=$1相同的调用./myscriptvar=foo*硬编码?


更长的形式

我在编写的 bash 脚本中遇到了一个奇怪的问题。我确信有一个简单的解释,但我无法弄清楚。

我正在尝试传递要在脚本中作为变量分配的命令行参数。

我希望脚本允许 2 个命令行参数,如下所示:

$ bash my_bash_script.bash args1 args2
Run Code Online (Sandbox Code Playgroud)

在我的脚本中,我分配了这样的变量:

ARGS1=$1
ARGS2=$2
Run Code Online (Sandbox Code Playgroud)

Args 1 是要添加到输出文件的字符串描述符。

Args 2 是一组目录:“dir1, dir2, dir3”,我将其作为 dir*

当我dir*在脚本中分配给 ARGS2 时它工作正常,但是当我dir*作为第二个命令行参数传递时,它只包含dir1dir*.

我认为这与 shell 如何处理通配符(即使作为 args 传递)有关,但我并不真正理解它。

任何帮助,将不胜感激。


环境/使用

我有一组目录:

dir_1_y_map, dir_1_x_map, dir_2_y_map, dir_2_x_map,
    ... dir_10_y_map, dir_10_x_map...
Run Code Online (Sandbox Code Playgroud)

这些目录里面,我试图访问一个文件扩展名".status"通过*.status,并".report.txt"通过*report.txt

我想dir_*_map作为第二个参数传递给脚本并将其存储在变量 ARGS2 中,然后使用它在每个目录中搜索".status"和 …

linux bash shell

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

标签 统计

r ×4

ggplot2 ×3

plot ×2

bash ×1

cowplot ×1

data-visualization ×1

data.table ×1

ggrepel ×1

gridextra ×1

linux ×1

shell ×1