使用reduce(bind_cols),可以组合相同维度的列表元素。但是,我想知道如何从可能具有不同维度元素的列表中仅组合相同维度(可能以某种方式指定维度)的元素。
library(tidyverse)
df1 <- data.frame(A1 = 1:10, A2 = 10:1)
df2 <- data.frame(B = 11:30)
df3 <- data.frame(C = 31:40)
ls1 <- list(df1, df3)
ls1
[[1]]
A1 A2
1 1 10
2 2 9
3 3 8
4 4 7
5 5 6
6 6 5
7 7 4
8 8 3
9 9 2
10 10 1
[[2]]
C
1 31
2 32
3 33
4 34
5 35
6 36
7 37
8 38
9 39 …Run Code Online (Sandbox Code Playgroud) 目标
我想使用dplyr在参数网格上运行模拟.具体来说,我想要一个我可以在另一个程序中使用的函数
这是我的方法
require(dplyr)
run <- function(data, fun, fixed_parameters, ...) {
## ....
## argument checking
##
fixed_parameters <- as.environment(fixed_parameters)
grouped_out <- do_(rowwise(data), ~ do.call(fun, c(., fixed_parameters, ...)))
ungroup(grouped_out)
}
Run Code Online (Sandbox Code Playgroud)
这有效.例如,对于
growth <- function(n, r, K, b) {
# some dynamical simulation
# this is an obviously-inefficient way to do this ;)
n + r - exp(n) / K - b - rnorm(1, 0, 0.1)
}
growth_runner <- function(r, K, b, ic, ...) {
# a wrapper …Run Code Online (Sandbox Code Playgroud) 我purrr:::pmap用三个输入R.目前尚不清楚我如何在公式调用中明确引用这些输入?使用map2时,公式调用如下~ .x + .y.但使用时该怎么办pmap?
从http://r4ds.had.co.nz/lists.html转载Hadley的例子
library(purrr)
mu <- list(5, 10, -3)
sigma <- list(1, 5, 10)
n <- list(1, 3, 5)
args2 <- list(mean = mu, sd = sigma, n = n)
pmap(args2, rnorm)
Run Code Online (Sandbox Code Playgroud)
如果我想在调用时显式引用输入参数rnorm,我可以使用:
pmap(args2, function(mean, sd, n) rnorm(n, mean, sd))
Run Code Online (Sandbox Code Playgroud)
但是说我想用公式方法做到这一点.我怎么做?例如,这不起作用:
pmap(args2, ~rnorm(n=.n, mean=.mean, sd=.sd))
Run Code Online (Sandbox Code Playgroud)
谢谢!!
如何为数据框中的多个标记向量设置缺失值.我正在使用spss的调查数据集.我正在处理大约20个不同的变量,具有相同的缺失值.所以想找到一种方法来使用lapply()来完成这项工作,但我不能.
我实际上可以用基数R通过as.numeric()然后重新编码()来做到这一点,但我对避风港和标记类的可能性很感兴趣所以我想在Hadley的tidyverse中找到一种方法来做到这一切
大致相关的变量看起来像这样.如果这是一个基本问题,我很抱歉,但我发现与避风港相关联的帮助文档和标记的包只是非常无益.
library(haven)
library(labelled)
v1<-labelled(c(1,2,2,2,5,6), c(agree=1, disagree=2, dk=5, refused=6))
v2<-labelled(c(1,2,2,2,5,6), c(agree=1, disagree=2, dk=5, refused=6))
v3<-data.frame(v1=v1, v2=v2)
lapply(v3, val_labels)
lapply(v3, function(x) set_na_values(x, c(5,6)))
Run Code Online (Sandbox Code Playgroud) 强文本我在安装包时不断遇到问题tidyverse,这使我无法执行许多文本处理任务。这个问题与 2017 年以来许多以前的线程中提到的问题相同,当我输入library(tidyverse)或尝试打开其他相关包时,他们总是说它需要 0.2.1 版本的vctrs. 我尝试过使用remote下载或下载其他临时版本但无济于事。有人可以帮我解决这个问题吗?
我正在使用最新版本的 R(版本 3.6.1),在 Rstudio 1.2.5033 上运行。我还更新了我的vctrs包。
install.packages("tidyverse")\ndevtools::install_github("tidyverse/tidyverse")\nlibrary(tidyverse)\nError: package or namespace load failed for \xe2\x80\x98tidyverse\xe2\x80\x99 in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]):\n namespace \xe2\x80\x98vctrs\xe2\x80\x99 0.2.0 is already loaded, but >= 0.2.1 is required\nIn addition: Warning message:\npackage \xe2\x80\x98tidyverse\xe2\x80\x99 was built under R version 3.6.2 \n\n\nlibrary(devtools)\ndevtools::install_github("tidyverse/tidyverse")\nlibrary(tidyverse)\nError: package or namespace load failed for \xe2\x80\x98tidyverse\xe2\x80\x99 in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]):\n namespace \xe2\x80\x98vctrs\xe2\x80\x99 0.2.0 is …Run Code Online (Sandbox Code Playgroud) 使用tidyverse了很多我经常面临的挑战是将命名向量转换为data.frame/ tibble,其中列是向量的名称.
这样做的首选/ tidyverse方式是什么?
编辑:这与:这和这个 github问题有关
所以我想:
require(tidyverse)
vec <- c("a" = 1, "b" = 2)
Run Code Online (Sandbox Code Playgroud)
成为这个:
# A tibble: 1 × 2
a b
<dbl> <dbl>
1 1 2
Run Code Online (Sandbox Code Playgroud)
我可以通过例如:
vec %>% enframe %>% spread(name, value)
vec %>% t %>% as_tibble
Run Code Online (Sandbox Code Playgroud)
用例:
require(tidyverse)
require(rvest)
txt <- c('<node a="1" b="2"></node>',
'<node a="1" c="3"></node>')
txt %>% map(read_xml) %>% map(xml_attrs) %>% map_df(~t(.) %>% as_tibble)
Run Code Online (Sandbox Code Playgroud)
这使
# A tibble: 2 × 3
a b c …Run Code Online (Sandbox Code Playgroud) tidyr::complete()将行添加到a data.frame中,以获取数据中缺少的列值组合.例:
library(dplyr)
library(tidyr)
df <- data.frame(person = c(1,2,2),
observation_id = c(1,1,2),
value = c(1,1,1))
df %>%
tidyr::complete(person,
observation_id,
fill = list(value=0))
Run Code Online (Sandbox Code Playgroud)
产量
# A tibble: 4 × 3
person observation_id value
<dbl> <dbl> <dbl>
1 1 1 1
2 1 2 0
3 2 1 1
4 2 2 1
Run Code Online (Sandbox Code Playgroud)
其中value组合person == 1和observation_id == 2缺少的组合df已填入值0.
什么相当于这个data.table?
我记得读书的地方,as.tibble()是一个别名的as_data_frame(),但我不知道到底是什么的别名是在编程术语.它与包装器类似吗?
所以我想我的问题大概可以归结为在两者之间可能的用法区别tbl_df()和as_data_frame():什么是它们之间的区别,如果有的话?
更具体地说,给定(非tibble)数据帧df,我经常使用以下方法将其转换为tibble:
df <- tbl_df(df)
Run Code Online (Sandbox Code Playgroud)
岂不
df <- as_data_frame(df)
Run Code Online (Sandbox Code Playgroud)
做同样的事?如果是这样,是否存在其他两种功能tbl_df()并且as_data_frame()不能互换使用以获得相同结果的情况?
在R文件说,
tbl_df()将论证转发给as_data_frame()
这是否意味着它tbl_df()是一个包装或别名as_data_frame()?R文档似乎没有说什么as.tibble(),我忘记了我读到它的别名as_data_frame().此外,显然 as_tibble()是另一个别名as_data_frame().
如果这四个函数的功能完全相同,那么赋予一个函数四个不同名称的意义何在?这不是更有说服力而不是有用吗?
我正在寻找一个tidyverse -solution,它可以计算数据数据中TF组内唯一值的出现次数.当我想要从那一点向前和向后计算变化时.此计数应存储在一个新变量中,以便为每个唯一的移位保存加号和减号.idtblTFPM##PM##TF
这个问题类似于我之前提出的问题,但在这里我特意寻找使用tidyverse工具的解决方案.Uwe data.table 在这里使用了一个优雅的答案.
如果这个问题违反了任何SO政策,请告诉我,我会很乐意重新打开我的初步问题,或者附上一个赏金问题.
用一个最小的工作例来说明我的问题.我有这样的数据,
# install.packages(c("tidyverse"), dependencies = TRUE)
library(tibble)
tbl <- tibble(id = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7),
TF = c(NA, 0, NA, 0, 0, 1, 1, 1, NA, 0, 0, …Run Code Online (Sandbox Code Playgroud) 我构建了一个脚本,它适用于小数据集(<1 M 行),但在大数据集上表现很差。我听说数据表比 tibbles 性能更高。除了了解数据表之外,我还有兴趣了解其他速度优化。
我将在脚本中分享几个命令作为示例。在每个示例中,数据集有 10 到 1500 万行和 10 到 15 列。
dataframe %>%
group_by(key_a, key_b, key_c,
key_d, key_e, key_f,
key_g, key_h, key_i) %>%
summarize(min_date = min(date)) %>%
ungroup()
Run Code Online (Sandbox Code Playgroud)
merge(dataframe,
dataframe_two,
by = c("key_a", "key_b", "key_c",
"key_d", "key_e", "key_f",
"key_g", "key_h", "key_i"),
all.x = T) %>%
as_tibble()
Run Code Online (Sandbox Code Playgroud)
dataframe %>%
left_join(dataframe_two,
by = "key_a") %>%
group_by(key_a, date.x) %>%
summarise(key_z = key_z[which.min(abs(date.x - date.y))]) %>%
arrange(date.x) %>%
rename(day = date.x)
Run Code Online (Sandbox Code Playgroud)
我可以应用哪些最佳实践,特别是我可以做些什么来使这些类型的函数针对大型数据集进行优化?
——
这是一个示例数据集
set.seed(1010)
library("conflicted") …Run Code Online (Sandbox Code Playgroud) r ×10
tidyverse ×10
dplyr ×5
purrr ×3
tidyr ×3
data.table ×2
devtools ×1
r-haven ×1
reduce ×1
simulation ×1
terminology ×1
tibble ×1
vctrs ×1