小编Tho*_*ing的帖子

查找单词中重叠的字母

我有一个只有三个单词的字符串,如下所示:

first_string <- c("self", "funny", "nymph")
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,这个向量的单词可以全部组合成一个单词,因为字母中有一些重叠,即我们得到 self fun un ny mph。我们称其为单词列车。

此外,我还有另一个包含很多单词的向量。设第二个向量为:

second_string <- c("house", "garden", "duck", "evil", "fluff")
Run Code Online (Sandbox Code Playgroud)

我想知道第二个字符串的哪些单词可以添加到单词序列中。在这种情况下,这是houseand fluff(可以添加在 self fun ny mphhouse的末尾并且可以放在and之间)。所以这里的预期输出是:fluffselffunny

expected <- data.frame(word= c("house", "fluff"), word_train= c("selfunnymphouse", "selfluffunnymph"))
Run Code Online (Sandbox Code Playgroud)

重叠可以是任意长度,即自我和滑稽仅与一个角色重叠,但滑稽和若虫在两个角色中重叠。

编辑

新词可以改变第一个词串的词序。例如,如果第二个向量包含单词,hugs我们可以将单词 train nymp h ug s el funny放在和nymph之前。selffunny

string combinations r character overlap

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

选择作为给定向量的排列的矩阵行

我有一个矩阵X

     one two three four
 [1,]  1   3   2   4
 [2,]  2   0   1   5
 [3,]  3   2   1   4
 [4,]  4   9   11  19
 [5,]  4   3   2   1
Run Code Online (Sandbox Code Playgroud)

我想要一个新的矩阵Y,其中仅包含“1”、“2”、“3”、“4”的排列行。那是:

     one two three four
 [1,]  1   3   2   4
 [3,]  3   2   1   4
 [5,]  4   3   2   1
Run Code Online (Sandbox Code Playgroud)

我应该使用什么函数或命令?

r permutation matrix subset

10
推荐指数
4
解决办法
595
查看次数

有没有更简洁的“data.table”方法来取消 data.table 中的嵌套列?

假设我们有一个data.table带有嵌套列的val

\n
dt <- data.table(\n  grp = c(1, 2, 1, 3, 4),\n  val = list("a", c("b", "c"), c("d", "e", "f"), "g", c("h", "i"))\n)\n
Run Code Online (Sandbox Code Playgroud)\n

显示为

\n
> dt\n   grp   val\n1:   1     a\n2:   2   b,c\n3:   1 d,e,f\n4:   3     g\n5:   4   h,i\n
Run Code Online (Sandbox Code Playgroud)\n
\n

问题

\n

我想要unnest专栏val,其中可能的选项是使用tidyr::unnest,即

\n
> dt %>%\n+   unnest(val)\n# A tibble: 9 \xc3\x97 2\n    grp val\n  <dbl> <chr>\n1     1 a\n2     2 b\n3     2 c\n4     1 d\n5     1 e\n6     1 f\n7 …
Run Code Online (Sandbox Code Playgroud)

nested r unnest data.table

10
推荐指数
2
解决办法
441
查看次数

使用 dplyr,如何并行更新两个扭曲列,而不是迭代方式?

我有一个df如下所示的虚拟数据框

> set.seed(1)
> df <- data.frame(x = runif(5), y = rnorm(5), val = sample(letters, 5))

> df
          x          y val
1 0.2655087  1.2724293   j
2 0.3721239  0.4146414   v
3 0.5728534 -1.5399500   n
4 0.9082078 -0.9285670   z
5 0.2016819 -0.2947204   g
Run Code Online (Sandbox Code Playgroud)

我想改变列xy,这样新的x=pmin(x,y)y=pmax(x,y)

预期的

我希望以上两个步骤同时运行,而不是顺序执行,并且transform从基础 R 可以给出所需的输出,例如

> transform(df, x = pmin(x, y),y = pmax(x, y))
           x         y val
1  0.2655087 1.2724293   j
2  0.3721239 0.4146414   v
3 -1.5399500 …
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr

10
推荐指数
3
解决办法
319
查看次数

向量化 sapply 函数

我正在尝试对以下函数进行矢量化以删除 sapply 循环。我正在计算累积偏度。

cskewness <- function(.x) {
  skewness <- function(.x) {
    sqrt(length(.x)) * sum((.x - mean(.x))^3) / (sum((.x - mean(.x))^2)^(3 / 2))
  }
  sapply(seq_along(.x), function(k, z) skewness(z[1:k]), z = .x)
}
Run Code Online (Sandbox Code Playgroud)

我的代数没搞对。有这个是错误的:

skewness2 <- function(.x) {
  n <- length(.x)
  csum <- cumsum(.x)
  cmu <- csum / 1:length(.x)
  num <- cumsum(.x - cmu)^3
  den <- cumsum((.x - cmu)^2)^(3/2)
  sqrt(n) * num / den
}
Run Code Online (Sandbox Code Playgroud)

正确的代码会产生:

x <- c(1,2,4,5,8)

> cskewness(x)
[1]       NaN 0.0000000 0.3818018 0.0000000 0.4082483
> skewness2(x)
[1]      NaN 1.000000 …
Run Code Online (Sandbox Code Playgroud)

performance r vectorization

10
推荐指数
2
解决办法
238
查看次数

累积 R 中每个可能组合的值

假设我有数据test(给定的 dput),其中 list-col 说items

test <- structure(list(items = list('a', c('b', 'c'), c('d', 'e'), 'f', c('g', 'h')),
               ID = c(1,1,1,2,2)), row.names = c(NA, 5L), class = "data.frame")

library(tidyverse)
test %>% group_by(ID) %>%
  mutate(dummy = accumulate(items, ~paste(.x, .y)))
Run Code Online (Sandbox Code Playgroud)

我得到一个像这样的 list-col 输出

  items ID        dummy
1     a  1            a
2  b, c  1     a b, a c
3  d, e  1 a b d, a c e
4     f  2            f
5  g, h  2     f g, f h …
Run Code Online (Sandbox Code Playgroud)

expand r dataframe accumulate tidyverse

9
推荐指数
4
解决办法
532
查看次数

变换单位矩阵

我有单位矩阵,可以通过生成diag(5)

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0    0    0
[2,]    0    1    0    0    0
[3,]    0    0    1    0    0
[4,]    0    0    0    1    0
[5,]    0    0    0    0    1
Run Code Online (Sandbox Code Playgroud)

我想将其转换为矩阵,其中系列在 1 之后开始。例如,第一列,值 1 到 5。第二列 - 值 1 到 4。

所需输出

    [,1] [,2] [,3] [,4] [,5]
[1,]    1   0   0   0   0
[2,]    2   1   0   0   0
[3,]    3   2   1   0   0
[4,]    4   3   2   1   0
[5,]    5 …
Run Code Online (Sandbox Code Playgroud)

r matrix

9
推荐指数
2
解决办法
332
查看次数

查找大小为 k 的所有精确覆盖

我正在寻找一些关于如何解决以下问题的想法。我的主要语言是 R。

描述

我有一个集合S和一组有效子集U。我希望找到US的所有精确覆盖,并且恰好使用k个子集。

例如

  • S = {1,2,3,4}
  • 有效子集U = {{1,2,3,4},{1,2},{3,4},{1,4},{2,3},{1},{4}}
  • k = 1 时,有 1 个解 {1,2,3,4}
  • k = 2 时,有 2 个解 {{{1,2}{3,4}},{{1,4}{2,3}}}
  • k = 3 时,有 1 个解
  • k >= 4 时无解

问题

在我的现实生活示例中,集合S有 500 个元素,U有 500,000 个子集。每个子集都有 1 到 8 个元素。使用线性程序,我发现最小精确覆盖的大小为 70。我正在寻找大小为 70 的所有覆盖。理论上,我可以循环线性程序,为现有解决方案添加约束,以便找到新的解决方案。我怀疑这会很慢。

我还尝试了 R 中修改的跳舞链接方法,如果深度大于k ,则带有停止点。这适用于较小的示例,但似乎会陷入更深入的搜索。我可以通过切换到 C++ 或使用更高级的数据结构(例如 ZDD)来添加一些改进。

任何替代方法的建议将不胜感激。

尝试线性优化

下面的代码是我如何使用线性规划找到最小覆盖范围

library(Rsymphony) …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm performance r combinatorics

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

将现有 Cov 矩阵转换为块对角线

我有一个现有的协方差矩阵,我想根据各个列所属的组将其转换为块对角线(例如,第 2 行/列是第 1 组,接下来是第 2 组等)是否有一种简单的方法这样做:

下面是我所拥有的示例:

m1 <- matrix(1:16, ncol=4, byrow=TRUE)
rownames(m1) <- colnames(m1 ) <- c('a', 'b', 'c', 'd')

   a  b  c  d
a  1  2  3  4
b  5  6  7  8
c  9 10 11 12
d 13 14 15 16
Run Code Online (Sandbox Code Playgroud)

我有2组:

第 1 组:“a”、“b”

第 2 组:“c”、“d”

我想要什么:

   a  b  c  d
a  1  2  0  0
b  5  6  0  0
c  0  0 11 12
d  0  0 15 16
Run Code Online (Sandbox Code Playgroud)

r matrix

9
推荐指数
5
解决办法
447
查看次数

学生的 t 分布 CDF R 基础文档

在学生 t 分布累积分布函数的上下文中,R 版本 4.3.1 的?dt文档强调了以下结果:

然而,在尝试验证该公式的准确性时,出现了不一致的情况,如以下代码片段所示:

v <- 5
t <- -1

## Student's t-distribution cumulative distribution function
pt(q = t, df = v, lower.tail = TRUE, ncp = 0)
#> [1] 0.1816087

## Application of the theorical result where there is a discrepancy 
## based on what is mentioned in R Version 4.3.1's ?dt documentation
1 - pbeta(q = v / (v + t^2), shape1 = v/2, shape2 = 1/2, 
          ncp = 0,lower.tail = TRUE)
#> …
Run Code Online (Sandbox Code Playgroud)

statistics r function probability

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