【发布时间】:2016-10-13 15:21:25
【问题描述】:
我正在尝试获取因子X 的向量,其值取决于数据框中的两个(可能更多)列。所以它可以有两个以上的层次。
有一种简单的方法可以在 for 循环中使用类似 C/C++ 的条件语句来执行它。假设,如果我从数据框MATRIX 中的两个布尔列Col1 和Col2 中的值构造X,我可以轻松地做到这一点:
X=vector()
for ( i in 1:nrow(MATRIX)) {
if (MATRIX$Col1[i]==1 && MATRIX$Col2[i]==1) {
X[i] = "both"
} else if (MATRIX$Col1[i]==1) {
X[i] = "col1"
} else if (MATRIX$Col2[i]==1) {
X[i] = "col2"
} else {
X[i] = "none"
}
}
问题显然在于,在大型数据帧中运行需要很长时间。我应该使用矢量化来优化这一点,但我看不到方法,因为 *apply、ifelse 或 any 之类的功能似乎没有help 就是这样一个任务,结果不是布尔值。
有什么想法吗?
【问题讨论】:
-
只需将
if... else转换为ifelse()并删除 for 循环。
标签: r if-statement vectorization