如何使用管道操作符管道替换功能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中链接算术运算符
我正在使用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中有一个选项可以做到这一点吗?如果没有,哈德利,你介意加入吗?
RStudio有一个有用的功能:
Session -> Set Working Directory -> To Source File Location
Run Code Online (Sandbox Code Playgroud)
有没有办法在不使用下拉菜单的情况下执行此操作?
更新:
也许更好的方式是:
是否有命令返回当前r脚本的文件路径?
我也找到了这个帖子,但解决方案对我没用.甚至不是哈德利!
编辑:这是如何在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) 您可以非常轻松地在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)
我的问题是,是否有可能只向一个方向延伸?
在你提问之前,我有充分的理由这样做,我保证!
编辑:公认的答案帮助我摆脱了眼界;这种变化毕竟是一种改进,并不令人讨厌。
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值, …
我从这里(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)
我有一个这样的功能:
func <- function(x) {
if (requireNamespace("broom", quietly = TRUE)) {
print(1)
} else {
print(2)
}
Run Code Online (Sandbox Code Playgroud)
我想使用testthat触发两种情况编写测试。但是,当然broom我的计算机上已经安装或未安装。该怎么办?