小编vry*_*ryb的帖子

R data.table by group替换所有缺失列的第一行

我有一个data.table,我正在尝试做类似的事情data[ !is.na(variable) ].但是,对于完全缺失的组,我只想保留该组的第一行.所以,我正在尝试使用by.我在网上做过一些研究并有一个解决方案,但我认为效率低下.

我在下面提供了一个示例,展示了我希望实现的目标,我想知道是否可以在不创建两个额外列的情况下完成此操作.

d_sample = data.table( ID = c(1, 1, 2, 2, 3, 3), 
                   Time = c(10, 15, 100, 110, 200, 220), 
                   Event = c(NA, NA, NA, 1, 1, NA))

d_sample[ !is.na(Event), isValidOutcomeRow := T, by = ID]
d_sample[ , isValidOutcomePatient := any(isValidOutcomeRow), by = ID]
d_sample[ is.na(isValidOutcomePatient), isValidOutcomeRow := c(T, rep(NA, .N - 1)), by = ID]
d_sample[ isValidOutcomeRow == T ]
Run Code Online (Sandbox Code Playgroud)

编辑:这里有一些与thelatemailFrank的解决方案的速度比较,其中包含一个包含60K行的更大数据集.

d_sample = data.table( ID = sort(rep(seq(1,30000), 2)), …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

R data.table从第i个元素到每个剩余元素的距离

假设我有以下数据:

d = data.table( id = 1, x = c(1, 10, 17, 35, 37, 45) )
Run Code Online (Sandbox Code Playgroud)

我想看看x by group id中的每个第i个元素是否有一个比它大30到40之间的元素.因此,对于x中第一个元素组ID(1),我希望看到1之后x中的任何值是否在值31和41之间.答案是肯定的,所以我想创建一个列valid_gap第一个元素为TRUE.最后,我希望得到:

d_final = data.table( id = 1, x = c(1, 10, 17, 35, 37, 45), valid_gap = c(T, T, F, F, F, F ) )
Run Code Online (Sandbox Code Playgroud)

我和一位同事已经考虑过这个问题了一段时间,我们真的试图避免在这里使用循环,但无法弄明白.这可能没有循环吗?

我最好的尝试是这样的:

d[, valid_gap := any(between( rdist(x[ .N - .I ])[,1], left = 30, right = 40 )), by = id]
Run Code Online (Sandbox Code Playgroud)

但我正在考虑问题,因为试图通过x索引,好像在循环中,我怀疑这是错误的想法.

编辑 - "坏"的解决方案:

x = c(1, 10, 17, 35, 37, 45)
valid_gap = c() …
Run Code Online (Sandbox Code Playgroud)

r distance data.table

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

动态循环 htmlwidgets 并为 RMarkdown 添加 knit 格式

我正在尝试动态创建和循环,htmlwidgets例如DTplotly、 或rbokeh生成自动针织报告。有没有办法将knitr格式(例如 )添加到此 github 问题https://github.com/ramnathv/htmlwidgets/pull/110tabset中概述的方法中?我也在那里发布了这个问题。tagList

下面是我的想法的一些示例代码,但它不太有效。我想做的是创建 10 个选项卡,每个选项卡都有一个从plot_list. 现在发生的事情是所有绘图都进入最后一个选项卡。在实践中,plot_list会有不同的图/表。

#' ---
#' title: htmltools::tagList test
#' output:
#'    html_document
#' ---

#' # {.tabset}
#+ results='asis', echo=FALSE
library(plotly)
library(printr)

plot_list = lapply(1:10, 
                   function(i){ 
                     as.widget(plot_ly(iris, 
                                       x = iris[["Sepal.Length"]],
                                       y = iris[["Sepal.Width"]], 
                                       mode = "markers")) 
                    } 
                  )

htmltools::tagList( lapply(1:10, 
                            function(i) {
                              pandoc.header(paste0("Tab",i,' {.tabset}'), 2)
                              plot_list[[i]]
                            } 
                          )
                   )

# rmarkdown::render("your_path/htmltoolsTagList_test.r")
Run Code Online (Sandbox Code Playgroud)

之前,我使用嵌套 for 循环成功地完成了类似的操作,但是一旦我尝试使用具有 HTML …

r knitr r-markdown htmlwidgets

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

标签 统计

r ×3

data.table ×2

distance ×1

htmlwidgets ×1

knitr ×1

r-markdown ×1