我有一个只有三个单词的字符串,如下所示:
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
我有一个矩阵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)
我应该使用什么函数或命令?
假设我们有一个data.table带有嵌套列的val
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)\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n我想要unnest专栏val,其中可能的选项是使用tidyr::unnest,即
> 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) 我有一个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)
我想改变列x和y,这样新的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) 我正在尝试对以下函数进行矢量化以删除 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) 假设我有数据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) 我有单位矩阵,可以通过生成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。
我有一个集合S和一组有效子集U。我希望找到U中S的所有精确覆盖,并且恰好使用k个子集。
例如
在我的现实生活示例中,集合S有 500 个元素,U有 500,000 个子集。每个子集都有 1 到 8 个元素。使用线性程序,我发现最小精确覆盖的大小为 70。我正在寻找大小为 70 的所有覆盖。理论上,我可以循环线性程序,为现有解决方案添加约束,以便找到新的解决方案。我怀疑这会很慢。
我还尝试了 R 中修改的跳舞链接方法,如果深度大于k ,则带有停止点。这适用于较小的示例,但似乎会陷入更深入的搜索。我可以通过切换到 C++ 或使用更高级的数据结构(例如 ZDD)来添加一些改进。
任何替代方法的建议将不胜感激。
下面的代码是我如何使用线性规划找到最小覆盖范围
library(Rsymphony) …Run Code Online (Sandbox Code Playgroud) 我有一个现有的协方差矩阵,我想根据各个列所属的组将其转换为块对角线(例如,第 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) 在学生 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) r ×10
matrix ×3
dataframe ×2
performance ×2
accumulate ×1
algorithm ×1
c++ ×1
character ×1
combinations ×1
data.table ×1
dplyr ×1
expand ×1
function ×1
nested ×1
overlap ×1
permutation ×1
probability ×1
statistics ×1
string ×1
subset ×1
tidyverse ×1
unnest ×1