【发布时间】:2017-04-02 07:01:21
【问题描述】:
我正在尝试对 R 中数据表的每个单元格执行一个函数,根据此循环的结果创建第二个单元格。例如,假设我有矩阵 A
Ad1 Ad2 Ad3 Ad4
AA 6 0 10
AB 7 10 12
AC 0 0 15
我正在尝试创建矩阵 B
Ad1 Ad2 Ad3 Ad4
AA 1 0 1
AB 1 0 1
AC 0 0 1
如果每个单元格的值 > 0,则每个单元格都假定值为 1 并且该列减去该单元格的总和也大于 0。
例如,AA~Ad2 为 6,列的和为 7 (6 + 7 + 0 - 6);则矩阵 B 中的 AA~Ad2 取值为 1。
有没有办法在不执行循环的情况下执行此操作?我已经设法通过一个循环来做到这一点,但它花费的时间太长了:
A = read.table(text="Ad1 Ad2 Ad3 Ad4
AA 6 0 10
AA 7 10 12
AA 0 0 15", header=TRUE)
B = read.table(text="Ad1 Ad2 Ad3 Ad4
AA 0 0 0
AA 0 0 0
AA 0 0 0", header=TRUE)
for (i in 1:nrow(B)) {
for (j in 2:ncol(B)) {
if ((sum(A[,j], na.rm = T) - ifelse(is.na(A[i,j]), 0, A[i,j]))> 0 &
ifelse(is.na(A[i,j]), 0, A[i,j]) > 0 )
{B[i,j] <- 1}
}
}
【问题讨论】: