我意识到dplyrv3.0允许你加入不同的变量:
left_join(x, y, by = c("a" = "b")将匹配x.a到y.b
但是,是否可以连接变量组合或者我必须事先添加复合键?
像这样的东西:
left_join(x, y, by = c("a c" = "b d")匹配[ x.a和x.c]到[ y.b和y.d] 的串联
我有一个有效的解决方案,但我正在寻找一个更清晰,更易读的解决方案,可能会利用一些较新的dplyr窗口函数.
使用mtcars数据集,如果我想查看第25,第50,第75百分位数以及每加仑英里数("mpg")和气缸数("cyl"),我使用以下代码:
library(dplyr)
library(tidyr)
# load data
data("mtcars")
# Percentiles used in calculation
p <- c(.25,.5,.75)
# old dplyr solution
mtcars %>% group_by(cyl) %>%
do(data.frame(p=p, stats=quantile(.$mpg, probs=p),
n = length(.$mpg), avg = mean(.$mpg))) %>%
spread(p, stats) %>%
select(1, 4:6, 3, 2)
# note: the select and spread statements are just to get the data into
# the format in which I'd like to see it, but are not critical
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以使用dplyr使用一些汇总函数(n_tiles,percent_rank等)更干净地完成这项工作?干净利落,我的意思是没有"做"声明.
谢谢
我正在尝试将其嵌入R htmlwidget到现有网页中 - 已经应用了引导程序和样式的网页.例如,请考虑以下网页(请注意应放置窗口小部件的位置):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<p>This is a test.</p>
<!-- htmlwidget should go here. -->
<p>A closing paragraph.</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我可以datatable像这样创建和保存小部件:
library(htmlwidgets)
library(datatable)
d1 <- datatable(mtcars, filter = "top")
saveWidget(d1, file = "widget_file.html")
Run Code Online (Sandbox Code Playgroud)
生成的widget_file.html(即使是这个适度的小部件)包含很多代码.有没有一种简单的方法可以将其嵌入到现有的网页/模板中?
我成功使用<iframe src="widget_file.html">但我想知道是否有更好的方法?此外,有没有办法将片段/依赖项(例如json数据)分开,widget_file.html以便将它们放在其他文件夹中?
注意:我创建了htmlwidget标记,但我相信应该有一个同义htmlwidgets标记.
我试图强制ggplot显示图例并修复因子的颜色,即使范围内没有值存在.
在下面的可再现的示例中,图1在变量X1的每个范围中具有至少一个值并且根据需要绘制.绘制每个图例标签并匹配所需的颜色.
在示例2中,变量Y1在每个创建的范围中没有值.因此,该图仅显示前4个图例标签并使用前4种颜色.
有没有办法绘制这个图形,迫使ggplot显示所有八个图例标签并修复颜色,以便cat1值始终为红色,cat2值始终为蓝色等.
我已经尝试了所有我能想到的但没有成功的事情.
- 可重复的例子 -
set.seed(45678)
dat <- data.frame(Row = rep(x = LETTERS[1:5], times = 10),
Col = rep(x = LETTERS[1:10], each = 5),
Y = rnorm(n = 50, mean = 0, sd = 0.5),
X = rnorm(n = 50, mean = 0, sd = 2))
library(ggplot2)
library(RColorBrewer)
library(dplyr)
dat <- dat %>% mutate(Y1 = cut(Y, breaks = c(-Inf,-3:3,Inf)),
X1 = cut(X, breaks = c(-Inf,-3:3,Inf)))
# Figure 1
ggplot(data = dat, aes(x = Row, y = Col)) …Run Code Online (Sandbox Code Playgroud) data.tablerleid为游程编码提供了一个很好的便利功能:
library(data.table)
DT = data.table(grp=rep(c("A", "B", "C", "A", "B"), c(2, 2, 3, 1, 2)), value=1:10)
rleid(DT$grp)
# [1] 1 1 2 2 3 3 3 4 5 5
Run Code Online (Sandbox Code Playgroud)
我可以在以下基础R上模仿这个:
df <- data.frame(DT)
rep(seq_along(rle(df$grp)$values), times = rle(df$grp)$lengths)
# [1] 1 1 2 2 3 3 3 4 5 5
Run Code Online (Sandbox Code Playgroud)
有没有人知道dplyr等效(?)或创建rleid行为的"最佳"方法dplyr是执行以下操作
library(dplyr)
my_rleid = rep(seq_along(rle(df$grp)$values), times = rle(df$grp)$lengths)
df %>%
mutate(rleid = my_rleid)
Run Code Online (Sandbox Code Playgroud) 我希望这能成为R中各种时间序列突破/变化/干扰检测方法的标志.我的问题是用以下每个包描述方法的动机和差异.也就是说,何时使用一种方法比另一种方法,相似性/差异等更有意义.
有问题的包裹:
我希望有针对性的答案.也许是每种方法的一个段落.在一个时间序列中很容易拍打每一个,但这可能会以滥用/违反假设为代价.有资源为ML监督/无监督技术提供指导.我(当然还有其他人)会欣赏这个时间序列分析领域的一些指南/指针.
任何人都可以提供关于处理多层透明度和alpha级别的最佳方法的建议(参考ggplot2)?在下面的示例代码中,很难看到各个州的边界线(例如南卡罗来纳州,北卡罗来纳州,弗吉尼亚州) - 我尝试过设置,alpha=0.00001但这似乎会让事情变得更糟......
library(ggplot2)
all_states = map_data("state")
set.seed(103)
df = data.frame(long=sample(-90:-70,100,T), lat=sample(30:45,100,T))
p = ggplot() +
geom_polygon(data=all_states, aes(x=long, y=lat, group=group), color="white", fill="grey80") +
stat_density2d(data=df, aes(x=long, y=lat, fill=..level.., alpha=..level..), # HELP HERE ???
size=2, bins=5, geom='polygon') +
geom_point(data=df, aes(x=long, y=lat),
color="coral1", position=position_jitter(w=0.4,h=0.4), alpha=0.8) +
theme_bw()
p
Run Code Online (Sandbox Code Playgroud) 我是一名R noob学习ggplot.我不明白为什么第一个片段有效,而第二个片段没有.我想在没有猜测的情况下找到一个好的binwidth,所以我尝试了一个不起作用的实验.
library(ggplot2)
attach(diamonds)
d <- diamonds
x <- ggplot(d, aes(x = price))
x <- x + geom_histogram(binwidth = 50)
x
# worked fine, but using the sequence and substituting i didn't
i <- seq(1, 101, by = 10) #tried to avoid the first arg as zero, but didn't work
x <- ggplot(d, aes(x = price))
x <- x + geom_histogram(binwidth = i)
x
Run Code Online (Sandbox Code Playgroud)
第二个抛出一个错误
Error in seq.default(round_any(range[1], size, floor), round_any(range[2], :
'from' must be of length 1
Error in …Run Code Online (Sandbox Code Playgroud) 最终,我试图实现类似于以下的东西,但是利用dplyr而不是plyr:
library(dplyr)
probs = seq(0, 1, 0.1)
plyr::ldply(tapply(mtcars$mpg,
mtcars$cyl,
function(x) { quantile(x, probs = probs) }))
# .id 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
# 1 4 21.4 21.50 22.80 22.80 24.40 26.0 27.30 30.40 30.40 32.40 33.9
# 2 6 17.8 17.98 18.32 18.98 19.40 19.7 20.48 21.00 21.00 21.16 21.4
# 3 8 10.4 11.27 13.90 14.66 15.04 15.2 15.44 15.86 16.76 18.28 19.2
Run Code Online (Sandbox Code Playgroud)
dplyr我能想到的最好的等价物是这样的:
library(tidyr)
probs = …Run Code Online (Sandbox Code Playgroud) r ×10
dplyr ×4
ggplot2 ×3
tidyr ×2
data-mining ×1
data.table ×1
htmlwidgets ×1
maps ×1
plyr ×1
time-series ×1