它似乎dplyr::case_when与dplyr::mutate调用中的其他命令不同.例如:
library(dplyr)
case_when(mtcars$carb <= 2 ~ "low",
mtcars$carb > 2 ~ "high") %>%
table
Run Code Online (Sandbox Code Playgroud)
作品:
.
high low
15 17
Run Code Online (Sandbox Code Playgroud)
但放入case_when一个mutate链:
mtcars %>%
mutate(cg = case_when(carb <= 2 ~ "low",
carb > 2 ~ "high"))
Run Code Online (Sandbox Code Playgroud)
你得到:
Error: object 'carb' not found
Run Code Online (Sandbox Code Playgroud)
虽然这很好
mtcars %>%
mutate(cg = carb %>%
cut(c(0, 2, 8)))
Run Code Online (Sandbox Code Playgroud) 在绘制时,删除网格线的标准方法似乎是徒劳的geom_sf.
例如,如果我们绘制一个简单的ggplot对象,这将删除网格
library(tidyverse)
library(sf)
mtcars %>%
ggplot(
aes(disp, hp)
) +
geom_point() +
theme(
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()
)
Run Code Online (Sandbox Code Playgroud)
回报
但是在绘图时使用相同的代码无法删除网格 geom_sf
"shape/nc.shp" %>%
system.file(
package = "sf"
) %>%
st_read(
quiet = TRUE
) %>%
ggplot() +
geom_sf(aes(fill = AREA)) +
theme(
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()
)
Run Code Online (Sandbox Code Playgroud)
通常我会想要选择子集是函数结果的变量子集.在这个简单的例子中,我首先得到所有与宽度特征有关的变量名
library(dplyr)
library(magrittr)
data(iris)
width.vars <- iris %>%
names %>%
extract(grep(".Width", .))
Run Code Online (Sandbox Code Playgroud)
哪个回报:
>width.vars
[1] "Sepal.Width" "Petal.Width"
Run Code Online (Sandbox Code Playgroud)
能够使用这些返回作为选择列的方式是有用的(虽然我知道它contains()和它的兄弟存在,但是我想要执行许多更复杂的子集,并且这个例子对于这个例子来说是微不足道的.这个例子的目的.
如果我尝试使用此函数作为选择列的方法,则会发生以下情况:
iris %>%
select(Species,
width.vars)
Error: All select() inputs must resolve to integer column positions.
The following do not:
* width.vars
Run Code Online (Sandbox Code Playgroud)
如何使用dplyr::select存储为字符串的变量名称向量?
在最近的版本中ggplot2,似乎已经以geom_point所呈现的方式进行了更改.
例如,如果我尝试进行alpha着色,那么我会得到以下外观:
library(ggplot2)
ggplot(mtcars) +
geom_point(aes(wt, qsec),
size = 8,
stroke = 0,
alpha = .3)
Run Code Online (Sandbox Code Playgroud)
我怎样才能ggplot模仿它早期的行为,让点看起来没有任何边界?
编辑:
正如我所说,这发生在:
最新版本的
ggplot2
> sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggplot2_2.0.0
loaded via a namespace (and not attached):
[1] …Run Code Online (Sandbox Code Playgroud) 试图在R的networkD3包的帮助下制作一个相当通用的Sankey图.仅供参考 - 这是包装手册中的示例
library(networkD3)
library(jsonlite)
library(magrittr)
energy <- "https://cdn.rawgit.com/christophergandrud/networkD3/master/JSONdata/energy.json" %>%
fromJSON
sankeyNetwork(Links = energy$links,
Nodes = energy$nodes,
Source = "source",
Target = "target",
Value = "value",
NodeID = "name",
units = "TWh",
fontSize = 12,
nodeWidth = 30)
Run Code Online (Sandbox Code Playgroud)
这导致:
我相当简单的扩展包括使用以下基础数据构建图表:
links <- structure(list(source = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 4L,
5L, 4L, 5L),
.Label = c("1", "2", "3", "4", "5"),
class = "factor"),
target = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 4L,
4L),
.Label = …Run Code Online (Sandbox Code Playgroud) 这是数据分析师一直在做的事情(特别是在处理具有缺失响应的调查数据时).通常首先将一组竞争数据矩阵相乘,将模型拟合到每个矩阵,然后组合结果.目前我正在手工做事并寻找更优雅的解决方案.
试想一下,有5个*.csv文件在工作目录中,命名为dat1.csv,dat2.csv,... dat5.csv.我想使用每个数据集估计相同的线性模型.
鉴于这个答案,第一步是收集文件列表,我将使用以下内容
csvdat <- list.files(pattern="dat.*csv")
Run Code Online (Sandbox Code Playgroud)
现在我想做点什么
for(x in csvdat) {
lm.which(csvdat == "x") <- lm(y ~ x1 + x2, data = x)
}
Run Code Online (Sandbox Code Playgroud)
"which"语句是我试图依次为每个模型编号的愚蠢方式,使用csvdat列表中的循环当前的位置.也就是说,我想这个循环返回一组5个流明的对象与名称lm.1,lm.2等
是否有一些简单的方法来创建这些对象,并命名它们,以便我可以轻松指出它们对应的数据集?
谢谢你的帮助!
所以我有一个简单的例子 - 一个完全交叉的三个治疗三个背景实验,其中测量每个治疗背景对的连续效应.我想根据每种情况分别按照效果订购每种治疗方法,但我仍然坚持使用ggplot的方法.
这是我的数据
df <- data.frame(treatment = rep(letters[1:3], times = 3),
context = rep(LETTERS[1:3], each = 3),
effect = runif(9,0,1))
Run Code Online (Sandbox Code Playgroud)
如果我将治疗和背景分解为单个9分制,我可以得到非常接近的东西,如下:
df$treat.con <- paste(df$treatment,df$context, sep = ".")
df$treat.con <- reorder(df$treat.con, -df$effect, )
ggplot(df, aes(x = treat.con, y = effect)) +
geom_point() +
facet_wrap(~context,
scales="free_x",
ncol = 1)
Run Code Online (Sandbox Code Playgroud)

除了在每个方面实现单独排序之外,我创建的新x变量可能具有误导性,因为它没有证明我们在所有三个上下文中都使用了相同的处理方式.
这是通过对潜在因素的一些操纵来解决的,还是有针对这种情况的ggplot命令?
在R中制作表格的传统方式:
data(mtcars)
round(100*prop.table(xtabs(~ gear + cyl, data = mtcars), 1), 2)
Run Code Online (Sandbox Code Playgroud)
回报
cyl
gear 4 6 8
3 6.67 13.33 80.00
4 66.67 33.33 0.00
5 40.00 20.00 40.00
Run Code Online (Sandbox Code Playgroud)
为了使用magrittr管道复制这个,我尝试过:
library(magrittr)
mtcars %>%
xtabs(~ gear + cyl, data = .) %>%
prop.table(., 1)
Run Code Online (Sandbox Code Playgroud)
到目前为止,它很有效
cyl
gear 4 6 8
3 0.06666667 0.13333333 0.80000000
4 0.66666667 0.33333333 0.00000000
5 0.40000000 0.20000000 0.40000000
Run Code Online (Sandbox Code Playgroud)
但任何尝试执行下一部分,其中我将比例转换为百分比,然后舍入,会导致错误.例如:
mtcars %>%
xtabs(~ gear + cyl, data = .) %>%
100*prop.table(., 1)
Run Code Online (Sandbox Code Playgroud)
和
mtcars %>%
xtabs(~ …Run Code Online (Sandbox Code Playgroud) 今天打印时出现新的警告信息 tibbles
library(tidyverse)
mtcars %>%
head %>%
as_tibble
Run Code Online (Sandbox Code Playgroud)
印刷
# A tibble: 6 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
4 21.4 6 258 110 3.08 3.22 …Run Code Online (Sandbox Code Playgroud) 在lubridate中的简单问题 - 我想将hms对象转换为自当天开始以来的适当秒数.
例如
library(lubridate)
hms("12:34:45")
Run Code Online (Sandbox Code Playgroud)
然后我想确切地知道12小时34分45秒是多长时间
一些明显的东西
seconds(hms("12:34:45"))
Run Code Online (Sandbox Code Playgroud)
回来
45s
Run Code Online (Sandbox Code Playgroud)
这不是我想要的.如何将这些hms值转换为秒?我想用lubridate