小编she*_*heß的帖子

高效的字符串相似性分组

设置:我有关于人员及其父母姓名的数据,我想找到兄弟姐妹(父母姓名相同的人).

 pdata<-data.frame(parents_name=c("peter pan + marta steward",
                                 "pieter pan + marta steward",
                                 "armin dolgner + jane johanna dough",
                                 "jack jackson + sombody else"))
Run Code Online (Sandbox Code Playgroud)

这里的预期输出将是一列,表示前两个观察属于X族,而第三和第四列各自属于一个独立的族.例如:

person_id    parents_name                           family_id
1            "peter pan + marta steward",           1
2            "pieter pan + marta steward",          1
3            "armin dolgner + jane johanna dough",  2
4            "jack jackson + sombody else"          3
Run Code Online (Sandbox Code Playgroud)

目前的方法:我对距离度量很灵活.目前,我使用Levenshtein编辑距离匹配obs,允许两个字符的差异.但是,如果它们运行得更快,其他变体如"最大公共子串"将会很好.

对于较小的子样本,我stringdist::stringdist在循环中使用stringdist::stringdistmatrix,但随着样本量的增加,这变得越来越低效.

一旦使用某个样本大小,矩阵版本就会爆炸.我极其低效的循环尝试是:

#create data of the same complexity using random last-names
#(4mio obs and ~1-3 kids per parents) …
Run Code Online (Sandbox Code Playgroud)

string performance r levenshtein-distance

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

直接在 Rcpp 中使用 (c)igraph(即,不经过 R)

我在 R 中使用 igraph。现在我正在尝试转向 Rcpp。igraph 是用 C 编写的,但可以从 R 中调用。现在从 C++ 我想直接调用它。

目前我的 Rcpp C++ 代码调用 R,它再次调用 C。这似乎很愚蠢。相反,我不想直接从我的 Rcpp C++ 代码中调用 C 库。一种方法似乎是简单地下载 igraph 标头并将其添加到 Rcpp 中:

#include <igraph-0.7.1\include\igraph.h>
Run Code Online (Sandbox Code Playgroud)

但随后编译器抱怨它找不到实际的代码(只有标题):

...
functions.o:functions.cpp:(.text+0x2fd): undefined reference to `igraph_matrix_set'
...
Run Code Online (Sandbox Code Playgroud)

将所有 ipgraph 编译为 Rcpp 依赖项似乎很困难,或者至少我找不到关于如何做到这一点的好的文档。

鉴于 igraph 是从 R 调用的,即在我的系统上运行,我怀疑应该有一种方法可以从 C++ 调用它,而无需通过 R 绕道而行,就像

// [[Rcpp::depends(igraph)]]
Run Code Online (Sandbox Code Playgroud)

任何指针都会非常感谢。

c++ r external igraph rcpp

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

从数据框中删除完美的多线性变量

我有一个带变量的数据框,其中一些包含相同的信息

x1 = runif(1000)
x2 = runif(1000)
x3 = x1 + x2
x4 = runif(1000)
x5 = runif(1000)*0.00000001 +x4
x6 = x5 + x3
x = data.frame(x1, x2, x3, x4, x5, x6)
Run Code Online (Sandbox Code Playgroud)

在下一步中,我想摆脱所有完全多线性的变量,例如列x3和x6(可能还有其他组合).

在Stata中,这很容易: _rmcoll varlist

如何在R中有效地完成?

编辑:请注意,最终目标是计算观测值之间的马哈拉诺比斯距离.为此,我需要删除冗余变量.而且据我所知,对于这个应用程序,我是否放弃x1,x2或x3并不重要

statistics r stata

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

一次拟合多个公式,比lapply更快的选择?

我有一个要适合数据的公式列表,而不是运行一个循环,出于性能考虑,我想立即执行此操作。估算应该仍然是分开的,我不是要估算SUR或其他任何值。下面的代码做我想要的

x <- matrix(rnorm(300),ncol=3)
y <- x %*% c(1,2,3)+rnorm(100)
formulae <-list(y~x[,1],
                y~x[,2],
                y~x[,1] + x[,2])
lapply(formulae,lm)
Run Code Online (Sandbox Code Playgroud)

不幸的是,formulae随着增加长度的增加,这变得有些慢了,有没有办法真正将其向量化?

如果有帮助,lm我唯一关心的结果就是系数和一些标准误差。

r vectorization lm

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