我想尽量简单
一些样本数据:
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) 这是这个问题的后续问题为什么用 := 和 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) 我想有几种方法可以做到这一点。因此,这个问题的答案即使不是主观的,也可能是主观的。因此,我将尝试缩小问题范围,并向您提供我已经完成的操作的详细信息。
\n\n我正在使用该R6
包,并且创建了一个IntervalNumeric
\nR6Class,它有两个字段lower_bound
和upper_bound
:
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.character
and :print
NumericInterval
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
):
> as.character(NumericInterval$new(0, pi))\n\n[1] "[0, …
Run Code Online (Sandbox Code Playgroud) 我的数据集存储在名为“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() 时需要。
我正在尝试绘制具有多个图层的地图。但是,当选择我想要在 controlLayer 面板中显示的组时,它会更改地图,但不会更改图例。事实上,这两个图例总是一起显示在地图上,但我一次只想要其中一个。
\n这是我使用的代码:
\nleaflet(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) 我已阅读http://adv-r.had.co.nz/Exceptions-Debugging.html,我所理解的是我们有三种主要类型的条件(我将其称为错误):
据我了解,错误是非常不合适的事情,它可能对我们的功能非常有害(最严重的错误类型)。但我无法区分警告和消息。我想说的是,一条消息共享有关我们代码中某些可能存在的错误部分的附加信息,但这不会直接影响我们的代码(这意味着我们的代码可以工作,但有一些我们应该注意的附加信息)。
如何在 Julia 中将字典的所有键作为单独的数组获取。
例如:
Dict("a" => 123, "b" => 456, "c" => 789)
Run Code Online (Sandbox Code Playgroud)
将给出以下数组:
["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud) 我有这些代表地图上坐标的数据以及每个点的值:
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
包,我成功地从x
和y
列创建了几何特征:
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
属性成比例的圆,而不是默认的色标。但我不知道该怎么做。
假设我有这个 csv 文件:
\nasdf,qwer,asdf,qwer,qwer\n1,2,3,4,5\n
Run Code Online (Sandbox Code Playgroud)\n如果我用来readr::read_csv("some.csv")
阅读它,我将根据列的位置获得重复项的新列名称。
# 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似乎可以使用 的name_repair
参数read_csv
并提供一个函数。