小编tom*_*omw的帖子

case_when在mutate管道中

它似乎dplyr::case_whendplyr::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)

r dplyr

34
推荐指数
4
解决办法
5万
查看次数

使用geom_sf绘图时无法删除网格线

在绘制时,删除网格线的标准方法似乎是徒劳的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)

在此输入图像描述

r ggplot2 r-sf

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

使用dplyr的select来引用变量名称

通常我会想要选择子集是函数结果的变量子集.在这个简单的例子中,我首先得到所有与宽度特征有关的变量名

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存储为字符串的变量名称向量?

r dplyr

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

gomplot2 2.0.0中的geom_point边框

在最近的版本中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 ggplot2

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

R的Sankey图

试图在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)

这导致:

从手册中参考Sankey图

我相当简单的扩展包括使用以下基础数据构建图表:

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)

r d3.js sankey-diagram networkd3 htmlwidgets

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

使用R,循环数据帧,并为循环中创建的对象分配适当的名称

这是数据分析师一直在做的事情(特别是在处理具有缺失响应的调查数据时).通常首先将一组竞争数据矩阵相乘,将模型拟合到每个矩阵,然后组合结果.目前我正在手工做事并寻找更优雅的解决方案.

试想一下,有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

是否有一些简单的方法来创建这些对象,并命名它们,以便我可以轻松指出它们对应的数据集?

谢谢你的帮助!

r

8
推荐指数
3
解决办法
8954
查看次数

ggplot facets中的单独排序

所以我有一个简单的例子 - 一个完全交叉的三个治疗三个背景实验,其中测量每个治疗背景对的连续效应.我想根据每种情况分别按照效果订购每种治疗方法,但我仍然坚持使用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 ggplot2

8
推荐指数
2
解决办法
1633
查看次数

如何用magrittr管道进行乘法运算

在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)

r magrittr

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

Dplyr 警告:`...` 不是空的

今天打印时出现新的警告信息 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)

r dplyr tibble

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

在R中,使用lubridate将hms对象转换为秒

在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

r lubridate

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

标签 统计

r ×10

dplyr ×3

ggplot2 ×3

d3.js ×1

htmlwidgets ×1

lubridate ×1

magrittr ×1

networkd3 ×1

r-sf ×1

sankey-diagram ×1

tibble ×1