gpt4 book ai didi

r - 将函数应用于 R 中矩阵的每个单元格

转载 作者:行者123 更新时间:2023-12-04 09:26:54 24 4
gpt4 key购买 nike

我正在尝试对 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}
}
}

最佳答案

我们可以通过创建两个逻辑矩阵来做到这一点而无需循环 -1) 检查数值列值是否大于 0 ( A[-1] > 0 ), 2) 检查列总和与列值的差值是否也大于 0 . 如果两者都为 TRUE(& 条件),则将逻辑矩阵转换为二进制(+)并将其分配给数据集的子集(A[-1])

A[-1] <-  +(colSums(A[-1])[col(A[-1])]-A[-1]>0 & A[-1] > 0)
A
# Ad1 Ad2 Ad3 Ad4
#1 AA 1 0 1
#2 AB 1 1 1
#3 AC 0 0 1

关于r - 将函数应用于 R 中矩阵的每个单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40676877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com