小编Cla*_*eri的帖子

使用 tidyverse 将列表嵌套到数据帧:比 tidyr unnest_wider 更快

我通过读取存储视频游戏日志信息的 JSON 获得了一个嵌套列表。列表的时间元素是一个简单的向量,而 inputManagerStates 和syncedProperties 是可能包含 0 个或多个元素的列表。

这是这个问题的后续内容,在一些帮助下,我设法将数据转换为矩形格式。不幸的是,我有很多这样的 JSON 文件,并且unnest_wider运行速度似乎相当慢。

列表:

test_list <- 
  list(list(time = 9.92405605316162, inputManagerStates = list(), 
syncedProperties = list()), list(time = 9.9399995803833, 
inputManagerStates = list(list(inputId = "InputY", buttonState = FALSE, 
    axisValue = 0), list(inputId = "InputX", buttonState = FALSE, 
    axisValue = 0.0501395985484123), list(inputId = "xPos", 
    buttonState = FALSE, axisValue = 5), list(inputId = "yPos", 
    buttonState = FALSE, axisValue = 0.0799999982118607), 
    list(inputId = "zPos", buttonState = FALSE, axisValue = 0), 
    list(inputId = "xRot", buttonState …
Run Code Online (Sandbox Code Playgroud)

r list unnest tidyr

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

DT:有没有办法在 google colab 中使用 r 作为交互式表格来显示数据帧?

您是否知道使用 R 在 colab 中显示数据框的“好”方法,最好是作为交互式表格?我正在尝试下面的代码(我通常在 rstudio 中使用),但它在 colab 中不起作用。

library(datasets)

data(iris)

library(DT)
DT::datatable(iris) #this typically displays a beautiful interactive html table, but not working with colab


#these display a simple table
View(iris)

fix(iris)
Run Code Online (Sandbox Code Playgroud)

我做了一些搜索,看起来有一种很好的方法可以在 python 下的 colab 中显示带有过滤器的交互式表https://colab.research.google.com/notebooks/data_table.ipynb#scrollTo=jcQEX_3vHOUz

但我找不到 R 的类似内容。您有什么建议吗?

谢谢

r dataframe dt google-colaboratory

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

Three-level partially nested model

I am modeling change over time in group psychotherapy subjects using R and lme4. My data have the following structure:

  • subject (id)
  • time (code 1-10 for equally spaced repeated measures)
  • outcome (for every repeated measure)
  • treatment (0/1 for psychotherapy/waiting list control)

My first two-level model with random slopes and intercepts works well and is simple:

lmer(outcome ~ time * treatment + (time | subject), data=data, REML=FALSE)
Run Code Online (Sandbox Code Playgroud)

Now I was wondering if I should use a three-level partially nested model because …

nested r lme4 multi-level

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

错误:`export_graph()`原因:*图形对象无效

我想使用xgboost模型将图形导出到R中的pdf。不幸的是,标题出现错误。

我按照官方的建议来解决它,但是没有用。

有人知道吗?我还需要做其他事情吗?

这是我所做的:

“以下是如何将此图保存到文件的示例。请注意,export_graph要正常工作,还必须安装DiagrammeRsvg和rsvg软件包。

library(DiagrammeR)
gr <- xgb.plot.tree(model=bst, trees=0:1, render=FALSE)
export_graph(gr, 'tree.pdf', width=1500, height=1900)
export_graph(gr, 'tree.png', width=1500, height=1900)
Run Code Online (Sandbox Code Playgroud)

pdf r xgboost

5
推荐指数
0
解决办法
366
查看次数

dplyr:case_when() 在具有多个条件的多列上

我制作了这个最小的可重复示例来举例说明我的问题。我已经设法解决了这个问题,但我相信有更优雅的编码方式。

问题是关于基于多个标准的二元分类。为了收到甜甜圈(编码为 1),需要至少 3(或更多)的分数:至少一个“a”标准项目,至少两个“b”标准项目和至少三个“c”标准项。如果不满足这些要求,则不会奖励任何甜甜圈(编码为 0)。

这是我的解决方案。你会如何更简洁/优雅地编码它?

require(dplyr)
df <- data.frame("a1" = c(3,2,2,5), 
                 "a2" = c(2,1,3,1),
                 "b1" = c(2,1,5,4),
                 "b2" = c(1,2,1,4),
                 "b3" = c(3,2,3,4),
                 "c1" = c(3,3,1,3),
                 "c2" = c(4,2,3,4),
                 "c3" = c(3,3,4,1),
                 "c4" = c(1,2,3,4),
stringsAsFactors = FALSE)

df_names <- names(df[, 1:9])
a_items <- names(df[, 1:2])
b_items <- names(df[, 3:5])
c_items <- names(df[, 6:9])

df_response <-  df %>% 
  select(df_names) %>% 
  mutate_all(
    funs(case_when(
      . >=3 ~ 1,
      is.na(.) ~ 0,
      TRUE  ~  0))) %>% 

  mutate(a_crit = case_when( rowSums(.[ ,a_items]) >=1 …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

R:当 tidyverse 动词不起作用时,串扰 :: SharedData 链接数据具有不同的格式(宽/长)

编辑TL;DR 使用crosstalk包,我正在寻找一种方法来链接利用长格式数据(线图)的图形与宽格式数据的交互式表格,以便表格中的每一行对应于图中的一条线。

我正在尝试将 DT 表与绘图图链接起来。我的麻烦在于图形需要长格式的数据,而表格需要宽格式。我可能专注于 tidyverse 的做事方式。我将尝试提供一个最小的示例,说明我正在尝试做什么以及我想获得什么。

设置:

library(tidyverse)
library(crosstalk)
library(plotly)
library(DT)

# Wide format
df_test1 <- data.frame(
  id = c("id1", "id2"),
  item1 = c(0, 4),
  item2 = c(3, 2),
  item3 = c(1, 4),
  item4 = c(3, 4),
  item5 = c(1, NA)
)

# Reshaped to long format
df_test2 <- 
  df_test1 %>%
  tidyr::pivot_longer(cols = item1:item5, names_to = "item", values_to = "value") %>%
  dplyr::mutate(item = as.factor(item)) %>%
  dplyr::mutate(value = factor(as.character(value), levels = c("0", "1", "2", "3", "4")))
Run Code Online (Sandbox Code Playgroud)

我试过的: …

r plotly dt tidyverse crosstalk

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

R:Tidyverse 选择语义 tidyselect::eval_select 将数字附加到重复项

我试图了解 tidyverse 设计以及如何使用它进行编程有一段时间了。我试图编写一个使用 tidyselect 语义的函数,我发现tidyselect::eval_select将数字附加到 lhs 表达式。看到这个语义用于列重命名,这并不奇怪。不幸的是,我用于构建数据结构的函数不需要这种行为,它需要表达式的 lhs 中提供的常规名称(根据需要重复多次)。我还没有设法找出这种行为的来源;它似乎是一个,make.unique但我找不到它的实现位置。如果你知道,我很想学习,如果没有,解决我的问题不应该依赖于它。我想要的只是 lhs 名称没有附加数字,如示例所示:

library(tidyverse)

# Data
data <- mtcars[, 8:11]

# Example
data %>%
  tidyselect::eval_select(rlang::expr(c(foo = 1, bar = c(2:4), foobar = c(1, "am", "gear", "carb"))), .)
#>     foo    bar1    bar2    bar3 foobar1 foobar2 foobar3 foobar4 
#>       1       2       3       4       1       2       3       4

# Function
test <- function(.data, ...) {
  loc <- tidyselect::eval_select(rlang::expr(c(...)), .data)
  names <- names(.data)
  list(names(loc), names[loc])
}

data %>%
  test(foo = 1, bar …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyverse rlang tidyselect

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

R4.0 性能:数据帧与列表、循环与向量化 - 常数向量减法示例

这是我第三次阅读 Hadley Wickham 臭名昭著的《Advanced R》,他在第二章解释了为什么列表迭代比数据帧迭代更好。一切看起来都合理、熟悉、符合预期。该示例函数从数据帧的每一列中减去中位数向量,它基本上是居中的一种形式。为了进行测试,我运行了 Grosser、Bumann 和 Wickham 在Advanced R Solutions中提供的代码中提供的代码。

\n
library(bench)\n\n# Function to generate random dataframe\ncreate_random_df <- function(nrow, ncol) {\n  random_matrix <- matrix(runif(nrow * ncol), nrow = nrow)\n  as.data.frame(random_matrix)\n}\n\n# For loop function that runs on dataframe\nsubtract_df <- function(x, medians) {\n  for (i in seq_along(medians)) {\n    x[[i]] <- x[[i]] - medians[[i]]\n  }\n  x\n}\n\n# Same for loop function but that runs on list\nsubtract_list <- function(x, medians) {\n  x <- as.list(x)\n  x <- subtract_df(x, medians)\n  list2DF(x)\n}\n\n\nbenchmark_medians <- …
Run Code Online (Sandbox Code Playgroud)

for-loop r list vectorization dataframe

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

在表格中生成渐进条形图(就像在 Excel 中一样)?

假设我有一个这样的表:

    df <- structure(list(ticker = c("AAPL", "MSFT", "AMZN", "NVDA"), high = c("182.94", 
"349.67", "3,773.08", "346.47"), current = c(170.7, 308, 2885, 
231.4), Off_by = c(-7, -14, -31, -50)), class = "data.frame", row.names = c(NA, 
-4L))
Run Code Online (Sandbox Code Playgroud)

R 中可以生成这样的表吗?

在此输入图像描述

基本上,它是一个颜色渐进条,用文本显示幅度。我不需要渐变效果,尽管那会很好。

谢谢。

r ggplot2

5
推荐指数
2
解决办法
431
查看次数

使用 purrr 通过多个映射跨多个列重新编码

我有一个带有问卷响应标签的数据框。我总是喜欢用项目答案定义制作一个小标题,然后用dplyr::recode()它们相应的定义替换所有项目标签。为了便于使用,定义 tibblerecode_df将这些对应关系存储为字符串,并且dplyr::recode()可以使用 bangbangbang 解压它们!!!并对其进行评估。在下面的玩具示例中,有 4 个项目,其中两个 forqa和两个 forqb共享相同的答案定义。

library(tidyverse)
set.seed(42)

# columns starting with `qa` and `qb` share the same answer structure 
data_df <- tibble(
  qa_1 = sample(c(0, 1), 5, replace = TRUE),
  qa_2 = sample(c(0, 1), 5, replace = TRUE),
  qb_1 = sample(1:5, 5, replace = TRUE),
  qb_3 = sample(1:5, 5, replace = TRUE)
)

# `answer` column stores string definitions for use with `dplyr::recode()`
recode_df <- …
Run Code Online (Sandbox Code Playgroud)

r dplyr recode purrr tidyverse

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

R:限制排列比使用for循环更有效

我试图a每次都重复选择3个元素的可变长度char矢量进行置换。排序仅对第一个元素计数,而对第二个和第三个元素不计算(例如abc!= bac!= cab,但是abc = acb和bca = bac)。每组3个置换元素应在数据框中为一行b

具有字母abcde的向量将产生以下预期输出:

abc
abd
abe
acd
ace
ade

bac
bad
bae
bcd
bce
bde

cab 
cad
cae
cbd
cbe
cde

dab
dac
dae
dbc
dbe
dce

eab
eac
ead
ebc
ebd
ecd
Run Code Online (Sandbox Code Playgroud)

我认为使用3 for循环可以实现此输出,但是如果向量较长,则速度会很慢。

abc
abd
abe
acd
ace
ade

bac
bad
bae
bcd
bce
bde

cab 
cad
cae
cbd
cbe
cde

dab
dac
dae
dbc
dbe
dce

eab
eac …
Run Code Online (Sandbox Code Playgroud)

recursion for-loop r

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