小编Jas*_*lns的帖子

dplyr可以连接多个列还是复合键?

我意识到dplyrv3.0允许你加入不同的变量:

left_join(x, y, by = c("a" = "b")将匹配x.ay.b

但是,是否可以连接变量组合或者我必须事先添加复合键?

像这样的东西:

left_join(x, y, by = c("a c" = "b d")匹配[ x.ax.c]到[ y.by.d] 的串联

r dplyr

96
推荐指数
2
解决办法
10万
查看次数

使用dplyr窗口函数计算百分位数

我有一个有效的解决方案,但我正在寻找一个更清晰,更易读的解决方案,可能会利用一些较新的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 dplyr tidyr

47
推荐指数
6
解决办法
4万
查看次数

将R htmlwidget嵌入到现有网页中

我正在尝试将其嵌入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标记.

r htmlwidgets

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

强制ggplot图例显示没有值时的所有类别

我试图强制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)

r ggplot2

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

是否存在与data.table :: rleid等效的dplyr?

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 run-length-encoding dplyr data.table

15
推荐指数
5
解决办法
2499
查看次数

R中具有测地线或大圆距离的空间测地纬度经度聚类的方法

我想将一些基本的聚类技术应用于某些纬度和经度坐标.沿着聚类(或一些无监督学习)的线条,通过它们的大圆距离或它们的测地距离确定坐标. 注意:这可能是一个非常糟糕的方法,所以请指教.

理想情况下,我想解决这个问题R.

我做了一些搜索,但也许我错过了一个坚实的方法?我所遇到的包:flexclustpam-不过,我还没有碰到过一个明确的例子(S)相对于下面来:

  1. 定义我自己的距离函数.
  2. flexclut(通过kccacclust)或pam考虑随机重启?
  3. 锦上添花=有没有人知道可以指定每个集群中最小元素数的方法/包?

r cluster-analysis

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

R中的时间序列突破/变化/干扰检测:结构,变化点,突破检测,bfast等

我希望这能成为R中各种时间序列突破/变化/干扰检测方法的标志.我的问题是用以下每个包描述方法的动机和差异.也就是说,何时使用一种方法比另一种方法,相似性/差异等更有意义.

有问题的包裹:

我希望有针对性的答案.也许是每种方法的一个段落.在一个时间序列中很容易拍打每一个,但这可能会以滥用/违反假设为代价.有资源为ML监督/无监督技术提供指导.我(当然还有其他人)会欣赏这个时间序列分析领域的一些指南/指针.

r time-series data-mining

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

ggplot2 stat_density2d的透明度和Alpha级别,带有R中的地图和图层

任何人都可以提供关于处理多层透明度和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)

maps visualization r ggplot2

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

如何动态设置直方图binwidth

我是一名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)

r ggplot2

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

R中plyr :: ldply(tapply)的dplyr等价物是什么?

最终,我试图实现类似于以下的东西,但是利用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 plyr dplyr tidyr

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