Я пытаюсь выполнить функцию для каждой ячейки таблицы данных в R, создавая вторую, основанную на результате этого цикла. Например, представьте, что у меня есть матрицаПрименить функцию к каждой ячейке матрицы в R
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
таким образом, что каждая ячейка принимает значение 1, если ячейка имеет значение> 0 и сумму столбца минус, что ячейка также больше 0.
Например, AA ~ Ad2 равно 6, а сумма столбца равна 7 (6 + 7 + 0 - 6); то AA ~ Ad2 в матрице B принимает значение 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}
}
}
Спасибо; который работал просто отлично. – user1482923