设置:我有关于人员及其父母姓名的数据,我想找到兄弟姐妹(父母姓名相同的人).
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) 我在 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)
任何指针都会非常感谢。
我有一个带变量的数据框,其中一些包含相同的信息
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并不重要
我有一个要适合数据的公式列表,而不是运行一个循环,出于性能考虑,我想立即执行此操作。估算应该仍然是分开的,我不是要估算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 ×4
c++ ×1
external ×1
igraph ×1
lm ×1
performance ×1
rcpp ×1
stata ×1
statistics ×1
string ×1