小编pie*_*ito的帖子

如何用dplyr和dot elipse编写嵌套函数?

我想尽量简单

一些样本数据:

library(magrittr)
library(dplyr)
library(rlang)

# sample data
tib <- tibble(
  a = 1:3,
  b = 4:6,
  c = 7:9
)
Run Code Online (Sandbox Code Playgroud)

现在是一个使两列总和的函数:

foo = function(df, x, y) {

  x <- enquo(x)
  y <- enquo(y)

  df %>% 
   select( !! x, !! y) %>% 
   mutate(sum = !! x + !! y) 
}
Run Code Online (Sandbox Code Playgroud)

希望它有效:

foo(tib, a, b) # to show it works

# A tibble: 3 x 3
#       a     b   sum
#   <int> <int> <int>
# 1     1     4     5
# 2 …
Run Code Online (Sandbox Code Playgroud)

nested r dplyr nse

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

当返回值多于要分配的列数时,为什么 data.table `:=` 在有或没有 `by` 的情况下工作方式不同?

这是这个问题的后续问题为什么用 := 和 tstrsplit 创建的新列在有或没有 `by` 参数的情况下是不同的?.

比较这两段代码:

library(data.table)

DT <- data.table(col = c('a', 'a_b', 'a_b_c'))

DT[, c('col1', 'col2') := tstrsplit(col, '_')]
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误:

Error in '[.data.table'(DT, , ':='(c("col1", "col2"), tstrsplit(col, "_"))) : Supplied 2 columns to be assigned 3 items. Please see NEWS for v1.12.2.

我完全理解的错误。但是,我不明白为什么下一段代码不会产生错误:

library(data.table)

DT <- data.table(col = c('a', 'a_b', 'a_b_c'))

DT[, c('col1', 'col2') := tstrsplit(col, '_'), by = .(col)]
DT
Run Code Online (Sandbox Code Playgroud)

输出:

     col col1 col2
1:     a    a    a
2:   a_b    a    b
3: a_b_c …
Run Code Online (Sandbox Code Playgroud)

r data.table

6
推荐指数
0
解决办法
128
查看次数

如何创建一个在 data.frame 中运行良好的新类型?

我想有几种方法可以做到这一点。因此,这个问题的答案即使不是主观的,也可能是主观的。因此,我将尝试缩小问题范围,并向您提供我已经完成的操作的详细信息。

\n\n

语境

\n\n

我正在使用该R6包,并且创建了一个IntervalNumeric\nR6Class,它有两个字段lower_boundupper_bound

\n\n
require(R6)\nNumericInterval <-\n  R6Class(\n        "NumericInterval",\n        public = list(\n          lower_bound = NA,\n          upper_bound = NA,\n          initialize = function(low, up) {\n            self$lower_bound <- low\n            self$upper_bound <- up\n          },\n          as_character = function() {\n            paste0("[", self$lower_bound, ", ",\n                        self$upper_bound, "]")}))\n
Run Code Online (Sandbox Code Playgroud)\n\n

我还使用S3通用方法系统来获取\n类型的as.characterand :printNumericInterval

\n\n
as.character.NumericInterval <- function(x, ...) {\n  x$as_character()}\nprint.NumericInterval <- function(x, ...) {\n  x$as_character()}\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我可以这样做(与 相同print):

\n\n
> as.character(NumericInterval$new(0, pi))\n\n[1] "[0, …
Run Code Online (Sandbox Code Playgroud)

types r dataframe r6 tibble

4
推荐指数
1
解决办法
411
查看次数

如何解析化学式以获得原子成分?

我的数据集存储在名为“Formula”的单列表中,如下所示:

row.identity..main.ID.
C5H6O2N3
C10H12N
C5H6O2N3S
Run Code Online (Sandbox Code Playgroud)

我想扩展当前表格,其中在每一列中写入字母并在相应数字下方的行中显示。基本上我想要这样的东西:

row.identity..main.ID.   C  H  O  N  S  X
C5H6O2N3                 5  6  2  3  0  0   
C10H12N                 10 12  0  1  0  0
C5H6O2N3S                5  6  2  3  1  0
Run Code Online (Sandbox Code Playgroud)

如果代码可以灵活处理带有不同字母的更长数据集,那就太好了。到目前为止,我尝试实施 Onyambu 的解决方案。

library(tidyverse)
library(stringr)    
Formula%>%mutate(row.identity..main.ID.=gsub("\\b([A-Za-z]+)\\b","\\30",row.identity..main.ID.),
               elements=str_extract_all(row.identity..main.ID.,"[A-Za-z]+"),
               value=str_extract_all(row.identity..main.ID.,"\\d+"))%>%
          unnest()%>%pivot_wider(elements,value,fill=0)
Run Code Online (Sandbox Code Playgroud)

然而,这会导致一些错误,例如“不兼容的长度:4、3”。和/或cols现在在使用 unnest() 时需要。

r chemistry

4
推荐指数
1
解决办法
72
查看次数

如何使用带有传单的控制层面板显示/隐藏图例?

我正在尝试绘制具有多个图层的地图。但是,当选择我想要在 controlLayer 面板中显示的组时,它会更改地图,但不会更改图例。事实上,这两个图例总是一起显示在地图上,但我一次只想要其中一个。

\n

这是我使用的代码:

\n
leaflet(data) %>%\n  addProviderTiles("Esri.WorldStreetMap") %>%\n  addRasterImage(r, opacity = 1, colors = cb, group = "Predictions") %>%\n  addLegend(pal = cb, values = wind_speed_range, title = "Wind Speed", opacity = 1, group = "Predictions", position = "topright") %>%\n  addCircles(radius = ~ residual*7000, color = "black", fillColor = ~ cb(predictions), fillOpacity = 1, label = ~ paste(as.character(residual), " / ", as.character(vitesse_vent), " / ", as.character(predictions)), weight = 2, group = "Predictions") %>%\n  addRasterImage(raster_difference, opacity = 1, colors = …
Run Code Online (Sandbox Code Playgroud)

r legend leaflet

3
推荐指数
1
解决办法
2158
查看次数

警告和消息有什么区别?

我已阅读http://adv-r.had.co.nz/Exceptions-Debugging.html,我所理解的是我们有三种主要类型的条件(我将其称为错误):

  • 错误
  • 警告
  • 信息

据我了解,错误是非常不合适的事情,它可能对我们的功能非常有害(最严重的错误类型)。但我无法区分警告和消息。我想说的是,一条消息共享有关我们代码中某些可能存在的错误部分的附加信息,但这不会直接影响我们的代码(这意味着我们的代码可以工作,但有一些我们应该注意的附加信息)。

  • 警告和按摩到底有什么区别?
  • 我是否正确理解错误的含义?

unit-testing r try-catch

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

如何获取字典中所有键的数组?

如何在 Julia 中将字典的所有键作为单独的数组获取。

例如:

Dict("a" => 123, "b" => 456, "c" => 789)
Run Code Online (Sandbox Code Playgroud)

将给出以下数组:

["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)

arrays dictionary julia

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

如何使用 sf 包根据特征属性绘制半径为圆的圆?

我有这些代表地图上坐标的数据以及每个点的值:

require(tidyverse)

df <- tribble(     ~ x,      ~ y,   ~ N,
               776025., 6990858.,   100,
               744220 , 6940666.,    75,
               774222., 6904024.,    55,
               719368., 6973708.,    30,
               735330., 7029420.,     1)
Run Code Online (Sandbox Code Playgroud)

使用该sf包,我成功地从xy列创建了几何特征:

require(sf)
(geom_column <- st_sfc(pmap(df[, 1:2], function(x, y) st_point(c(x, y)))))
Run Code Online (Sandbox Code Playgroud)

然后将这些几何特征与对象N中的属性特征组合起来sf

(df <- st_sf(df[, 3], geometry = geom_column))
Run Code Online (Sandbox Code Playgroud)

然后我可以绘制这 5 点:

plot(df)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在我想使用半径与N属性成比例的圆,而不是默认的色标。但我不知道该怎么做。

geography r r-sf

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

如何通过对重复项进行编号而不是按其列位置来替换 readr 包的 name_repair 行为?

假设我有这个 csv 文件:

\n
asdf,qwer,asdf,qwer,qwer\n1,2,3,4,5\n
Run Code Online (Sandbox Code Playgroud)\n

如果我用来readr::read_csv("some.csv")阅读它,我将根据列的位置获得重复项的新列名称。

\n
# A tibble: 1 \xc3\x97 5\n  asdf...1 qwer...2 asdf...3 qwer...4 qwer...5\n     <dbl>    <dbl>    <dbl>    <dbl>    <dbl>\n1        1        2        3        4        5\n
Run Code Online (Sandbox Code Playgroud)\n

如果我宁愿使用基于重复次数的后缀的名称,并且对于第一次出现时不做任何修改,我该怎么办:

\n
# A tibble: 1 \xc3\x97 5\n   asdf  qwer asdf_1 qwer_1 qwer_2\n  <dbl> <dbl>  <dbl>  <dbl>  <dbl>\n1     1     2      3      4      5\n
Run Code Online (Sandbox Code Playgroud)\n
\n

暗示

\n

似乎可以使用 的name_repair参数read_csv并提供一个函数。

\n

r rename readr

0
推荐指数
1
解决办法
76
查看次数