小编Bra*_*don的帖子

使用=每行用于数据表

我有一个数据表,我正在尝试创建一个新变量,它是所有其他列的函数.一个简单的例子是,如果我只想在所有行中求和或取平均值.例如:

dt <- data.table(a = 1:9, b = seq(10,90,10), c = seq(11:19), d = seq(100, 900, 100))
Run Code Online (Sandbox Code Playgroud)

我想创建一个矢量/列,它只是所有列的平均值.我想到的语法看起来像这样:

dt[, average := mean(.SD)]
Run Code Online (Sandbox Code Playgroud)

然而,这总结了整个事情.我知道我也可以这样做:

dt[, average := lapply(.SD, mean)] 
Run Code Online (Sandbox Code Playgroud)

但这会产生单行结果.我基本上寻找相当于:

dt[, average := lapply(.SD, mean), by = all]
Run Code Online (Sandbox Code Playgroud)

这样它只是为所有行计算这个,而不必创建一个"id"列并按该列进行所有计算.这可能吗?

r data.table

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

旋转 ggplot 树状图的标签

我正在尝试使用包 dendexend 创建一个树状图。它创建了非常好的 gg 树状图,但不幸的是,当你把它变成一个“圆圈”时,标签跟不上。我将在下面提供一个示例。

我的距离对象在这里:http : //speedy.sh/JRVBS/mydist.RDS

library(dendextend)
library(ggplot2)
#library(devtools) ; install_github('kassambara/factoextra')
library(factoextra)


clus <- hcut(mydist, k = 6, hc_func = 'hclust', 
             hc_method = 'ward.D2', graph = FALSE, isdiss = TRUE)

dend <- as.dendrogram(clus)
labels(dend) <- paste0(paste0(rep(' ', 3), collapse = ''), labels(dend))
dend <- sort(dend, decreasing = FALSE)

ggd1 <- ggplot(dend %>%
                   set('branches_k_color', k = 6) %>%
                   set('branches_lwd', 0.6) %>%
                   set('labels_colors', k = 6) %>%
                   set('labels_cex', 0.6), 
               theme = theme_minimal(),
               horiz = TRUE)
ggd1 <- ggd1 + …
Run Code Online (Sandbox Code Playgroud)

r dendrogram ggplot2 ggdendro dendextend

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

Rscript检测是否从另一个脚本调用/来源R脚本

我有一个脚本,当它来源时检查脚本是否以交互方式运行interactive().如果以交互方式运行,则不会搜索命令行参数.但是,如果它不是以交互方式运行,则会搜索命令行参数并引发错误.

这通常很好,但有时我写了第二个R脚本,我想独立运行只是为了处理一些数据.所以Script2源脚本1,Script1检测到它没有以交互方式运行,并开始搜索命令行参数并抛出错误.

除了interactive()脚本可以检测其上下文之外,还有其他方法吗?例如,我希望在直接运行时与在加载它以访问其内部函数之一时需要单独的行为.使用包我可以做一些类似dplyr::arrange()访问arrange而无需加载所有dplyr.

编辑:我目前非常janky解决方法是启动一个交互式会话,源脚本1,用于save.image()保存函数,然后在Script2用于load加载保存的.RData文件.但显然这不是......优雅.


我不认为我使用的确切代码是相关的,但包括它以防有人认为这对答案很重要...

剥离示例代码:

#!/usr/bin/env Rscript

library(optparse)

function1 <- function(etc,etc) {}
function2 <- function(etc,etc) {}

if(!interactive()) { 

    # example call
    # Rscript create_reference_file.R -c cd4cd8 -o /home/outputfolder/ 

    option_list = list(
        make_option(c('-c', '--cell'), type = 'character', default = NULL,
                    help = 'the name of the cell',
                    metavar = 'character'),
        make_option(c('-o','--outdir'), type = 'character', default = NULL, 
                    help = 'the location where you wish to store …
Run Code Online (Sandbox Code Playgroud)

unix shell r rscript

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

从 glm 系数中提取参考水平

我知道参考水平不包括在内,但我想要一种能够获取拟合glm对象并找出参考水平的方法(即不使用原始数据集的知识)。它是否存储在glm安装对象的任何位置?

\n\n

示例数据如下:

\n\n
> btest <- data.frame(var1 = sample(c(1,2,3), 100, replace = T),\n+                     var2 = sample(c(\'a\',\'b\',\'c\'), 100, replace = T),\n+                     var3 = sample(c(\'e\',\'f\',\'g\'), 100, replace = T),\n+                     var4 = rnorm(100, mean = 3, 2),\n+                     var5 = sample(c(\'yes\',\'no\'), 100, replace = T))\n> summary(glm(var5 ~ var1 + var2 + var3 + var4, data = btest, family = \'binomial\'))\n\nCall:\nglm(formula = var5 ~ var1 + var2 + var3 + var4, family = "binomial", \n    data = btest)\n\nDeviance Residuals: \n …
Run Code Online (Sandbox Code Playgroud)

regression r logistic-regression

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

ggplot2减少geom_point()因子之间的空间

我正在尝试制作垂直散点图.与您在许多箱形图中看到的类似.然而,在条形图中我可以增加条的宽度以缩小不同因子条之间的间隙,这对于geom_point不起作用(并且无论如何都不会看起来有吸引力).我在这里不知所措.

例:

df <- data.frame('facs' = sample(1:5, 50, replace = TRUE), 
                 'var' = sample(c('boy','girl'), 50, replace = TRUE),
                 'val' = rnorm(50)
                 )
ggplot(df, aes(facs, val)) + geom_point(aes(color = as.factor(facs), size = 4)) + facet_wrap(~var)
Run Code Online (Sandbox Code Playgroud)

输出看起来像这样,但我真的想缩短它们之间的所有空白区域: 在此输入图像描述

r ggplot2

3
推荐指数
1
解决办法
2414
查看次数

如何将管道送入不等式?

这已经在多个实例中出现过,我不知道当前的实例是否可以推广到我遇到的许多情况,但我希望答案可以带来一些启发。

最简单的版本是当我正在进行一些数据处理并想要对管道的结果进行评估时。一个简单的例子是:

> seq(9) %>% > 4
Error: unexpected '>' in "seq(9) %>% >"
> seq(9) %>% . > 4
Error in .(.) : could not find function "."
Run Code Online (Sandbox Code Playgroud)

所需的输出将是一个逻辑向量

FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
Run Code Online (Sandbox Code Playgroud)

在许多情况下,我想对某些管道输出进行评估,但必须对其进行分配,然后执行评估才能使其正常工作:

seq(9) -> vec
vec > 4
Run Code Online (Sandbox Code Playgroud)

有没有办法完全在管道链内完成此类评估?

r piping magrittr

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

dplyr 使用条件列和特定行进行变异

我有一个带有两个分数列的 data.frame。我想有条件地按行使用其中之一的数据。我用下面的例子来解释......

> dff <- data.frame(dataset = c('Main','Main','b','b','c','c','d','d'), 
+                  score1 = c(0.01,0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08), 
+                  score2 = c(0.001, 0.2, 0.003, 0.4, 0.005, 0.6, 0.007, 0.8),
+                  name = c('A','B','A','B','A','B','A','B')); 
> dff
  dataset score1 score2 name
1    Main   0.01  0.001    A
2    Main   0.02  0.200    B
3       b   0.03  0.003    A
4       b   0.04  0.400    B
5       c   0.05  0.005    A
6       c   0.06  0.600    B
7       d   0.07  0.007    A
8       d   0.08  0.800    B
Run Code Online (Sandbox Code Playgroud)

我试图从一个分数中为 …

r dplyr nse mutate

3
推荐指数
1
解决办法
4273
查看次数

使用具有可变功能的多个字符串的向量进行Dplyr标准评估

我试图提供一个包含多个列名的向量,以mutate()使用该dplyr程序包进行调用。以下是可重现的示例:

stackdf <- data.frame(jack = c(1,NA,2,NA,3,NA,4,NA,5,NA),
                      jill = c(1,2,NA,3,4,NA,5,6,NA,7),
                      jane = c(1,2,3,4,5,6,NA,NA,NA,NA))
two_names <- c('jack','jill')
one_name <- c('jack')

#   jack jill jane
#    1    1    1
#   NA    2    2
#    2   NA    3
#   NA    3    4
#    3    4    5
#   NA   NA    6
#    4    5   NA
#   NA    6   NA
#    5   NA   NA
#   NA    7   NA
Run Code Online (Sandbox Code Playgroud)

我能够弄清楚如何使用“一个变量”版本,但不知道如何将其扩展到多个变量?

# the below works as expected, and is an example of the output …
Run Code Online (Sandbox Code Playgroud)

r dplyr nse standard-evaluation rlang

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

dplyr mutate_at和ifelse()没有矢量化

我试图mutate_at在我的数据框中的列的子集使用.但是,当我使用的功能是ifelse,它似乎不是矢量化.

例如,下面的代码应该提供与原始输入相同的输出.

set.seed(1)
stack_names <- c('a','c','d','e')
stack_df <- data.frame(a = 1:10, b = 11:20, c = 21:30, d = rep(1, 10), e = rnorm(10))

#     a  b  c d          e
# 1   1 11 21 1 -0.6264538
# 2   2 12 22 1  0.1836433
# 3   3 13 23 1 -0.8356286
# 4   4 14 24 1  1.5952808
# 5   5 15 25 1  0.3295078
# 6   6 16 26 1 -0.8204684
# 7   7 17 …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

计算多组分割的 wilcoxon 检验并保留原始组信息的简洁方法

我正在寻找一种在保留原始组信息的同时使用group_split()or语法的方法summarise()。我已经看过一些以前的页面,例如此处此处,使用这些方法,但它们不保留分组信息。有没有办法做到这一点?我当然可以加入数据,但希望避免使用这种方法。

\n
> set.seed(22)\n> # Create fake data\n> flavor <- data.frame(\n+   temperature = sample(x = c(\'hot\',\'cold\'), size = 500, replace = TRUE),\n+   color = sample(c(\'red\',\'blue\',\'green\'), 500, TRUE),\n+   texture = sample(c(\'crumbly\', \'crispy\', \'wet\', \'soft\'), 500, TRUE),\n+   flavor = sample.int(n = 100, size = 500, replace = TRUE)\n+ )\n> \n> head(flavor, 10)\n   temperature color texture flavor\n1         cold   red    soft     47\n2          hot   red crumbly      2\n3         cold  blue  crispy     28\n4         cold  blue    soft     36\n5         cold  blue …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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