小编Ale*_*ock的帖子

使用%>%替换函数,如colnames()< -

如何使用管道操作符管道替换功能colnames()<-

这是我正在尝试做的事情:

library(dplyr)
averages_df <- 
   group_by(mtcars, cyl) %>%
   summarise(mean(disp), mean(hp))
colnames(averages_df) <- c("cyl", "disp_mean", "hp_mean")
averages_df

# Source: local data frame [3 x 3]
# 
#   cyl disp_mean   hp_mean
# 1   4  105.1364  82.63636
# 2   6  183.3143 122.28571
# 3   8  353.1000 209.21429
Run Code Online (Sandbox Code Playgroud)

但理想情况下它会是这样的:

averages_df <- 
  group_by(mtcars, cyl) %>%
  summarise(mean(disp), mean(hp)) %>%
  add_colnames(c("cyl", "disp_mean", "hp_mean"))
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有每次编写专业功能的情况下这样做?

这里的答案是一个开始,但不完全是我的问题:在dplyr中链接算术运算符

r dplyr magrittr

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

使用dplyr的summarise_each为每个函数返回一行?

我正在使用dplyr的summarise_each将函数应用于多列数据.一件好事是你可以同时应用多个功能.事实上,令人讨厌的是输出是具有单行的数据帧.它似乎应该返回与函数一样多的行,列数与列总结的列数相同.

library(dplyr)  
default <- 
  iris %>% 
  summarise_each(funs(min, max), matches("Petal"))
Run Code Online (Sandbox Code Playgroud)

这回来了

> default
  Petal.Length_min Petal.Width_min Petal.Length_max Petal.Width_max
1                1             0.1              6.9             2.5
Run Code Online (Sandbox Code Playgroud)

我更喜欢像

library(reshape2)
desired <- 
  iris %>% 
  select(matches("Petal")) %>% 
  melt() %>% 
  group_by(variable) %>% 
  summarize(min=min(value),max=max(value)) %>%
  t()
Run Code Online (Sandbox Code Playgroud)

返回一些接近的东西(不是数据帧,但你们都明白了)

> desired
         [,1]           [,2]         
variable "Petal.Length" "Petal.Width"
min      "1.0"          "0.1"        
max      "6.9"          "2.5" 
Run Code Online (Sandbox Code Playgroud)

在summarise_each中有一个选项可以做到这一点吗?如果没有,哈德利,你介意加入吗?

r dplyr

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

"将工作目录设置为源文件位置"的命令

RStudio有一个有用的功能:

Session -> Set Working Directory -> To Source File Location
Run Code Online (Sandbox Code Playgroud)

有没有办法在不使用下拉菜单的情况下执行此操作?

更新:

也许更好的方式是:

是否有命令返回当前r脚本的文件路径?

我也找到了这个帖子,但解决方案对我没用.甚至不是哈德利!

Rscript:确定执行脚本的路径

r working-directory rstudio

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

嵌套的ifelse()是最糟糕的; 什么是最好的?

编辑:这是如何在R中有效实现合并的一个骗局,同意.我没有意识到我的问题比我的具体应用更普遍,所以这个讨论很棒.

有时,随机实验中的响应变量包含在每个实验组的不同列中(下面的代码中为Y_1到Y_5).通常最好将响应变量收集到一个列(Y_all)中.我最终这样做,如下例所示.但我确定有更好的方法.想法?

set.seed(343)
N <- 1000
group <- sample(1:5, N, replace=TRUE)
Y_1 <- ifelse(group==1, rbinom(sum(group==1), 1, .5), NA)
Y_2 <- ifelse(group==2, rbinom(sum(group==2), 1, .5), NA)
Y_3 <- ifelse(group==3, rbinom(sum(group==3), 1, .5), NA)
Y_4 <- ifelse(group==4, rbinom(sum(group==4), 1, .5), NA)
Y_5 <- ifelse(group==5, rbinom(sum(group==5), 1, .5), NA)

## This is the part I want to make more efficient
Y_all <- ifelse(!is.na(Y_1), Y_1, 
                ifelse(!is.na(Y_2), Y_2, 
                       ifelse(!is.na(Y_3), Y_3, 
                              ifelse(!is.na(Y_4), Y_4, 
                                     ifelse(!is.na(Y_5), Y_5, 
                                            NA)))))

table(Y_all, Y_1, exclude = NULL)
table(Y_all, Y_2, exclude …
Run Code Online (Sandbox Code Playgroud)

if-statement r

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

在单一方向上扩展geom_smooth

您可以非常轻松地在ggplot2中扩展回归线:

c <- ggplot(mtcars, aes(y=wt, x=mpg)) + xlim(0,50)
c + stat_smooth(method=lm, fullrange=TRUE) + geom_point()
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有可能只向一个方向延伸?

在你提问之前,我有充分的理由这样做,我保证!

r ggplot2

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

该表包括R&gt; 3.4.0中的显式NA

编辑:公认的答案帮助我摆脱了眼界;这种变化毕竟是一种改进,并不令人讨厌。

table现在,在的帮助文件中:

非因子参数a通过factor(a,exclude = exclude)强制。从R 3.4.0开始,请注意不要对排除的值进行计数(以前将它们包括在NA计数中)。

这很烦人。在此之前,您可以调用table(x, exclude = NULL)并获得对NA数值数量的明确确认。现在,如果没有,则不会被告知。观察:

vec_with_no_nas <- c("A", "B", "B", "C")
vec_with_nas <- c("A", "B", NA, "C")

table(vec_with_no_nas)
table(vec_with_no_nas, exclude = NULL)

table(vec_with_nas)
table(vec_with_nas, exclude = NULL)
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

> table(vec_with_no_nas)
vec_with_no_nas
A B C 
1 2 1 
> table(vec_with_no_nas, exclude = NULL)
vec_with_no_nas
A B C 
1 2 1 
Run Code Online (Sandbox Code Playgroud)

看到?没有明确确认零个NA。

我真正想要的是类似旧行为的东西:

> table(vec_with_no_nas, exclude = NULL)
vec_with_no_nas
A B C <NA>
1 2 1 0
Run Code Online (Sandbox Code Playgroud)

FWIW,如果向量确实具有NA值, …

r na tidyverse

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

是否可以定义新的绘图形状?

我从这里(http://sape.inf.usi.ch/quick-reference/ggplot2/shape)看到了一组可能的形状。如果我想定义新的形状,可以吗?例如,假设我想使用具有可选填充美学的 7 边多边形 - 有没有办法告诉 ggplot 该形状?

我感到受到这组可能性的限制:

library(tidyverse)
dat <- tibble(p = c(0:25, 32:127),
              x = p %% 16,
              y = p %/% 16)
ggplot(dat, aes(x, y)) +
  geom_text(aes(label = p), size = 3, nudge_y = -.25) +
  geom_point(aes(shape = p), size = 5, fill = "red") +
  scale_shape_identity() +
  theme_void()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

r data-visualization ggplot2

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

如何测试取决于是否安装软件包的行为

我有一个这样的功能:

func <- function(x) {
  if (requireNamespace("broom", quietly = TRUE)) {

    print(1)

  } else {

    print(2)

  }
Run Code Online (Sandbox Code Playgroud)

我想使用testthat触发两种情况编写测试。但是,当然broom我的计算机上已经安装或未安装。该怎么办?

r testthat

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