【问题标题】:Dividing each row of data frames within a list by a corresponding matrix value将列表中的每一行数据帧除以相应的矩阵值
【发布时间】:2020-05-08 20:54:27
【问题描述】:

我有一个包含 3 个数据框的列表,每个数据框有 3 行 (op2) 和一个矩阵 (rep_totals)。每个数据框的每一行都与我的矩阵中的一个值相关,趋势:op2[[i]][j,]对应rep_totals[i,j]

我想将op2 中每个数据帧的每一行除以rep_totals 中的相应值,以生成一个包含 3 个新数据帧 (gt_freqs) 及其调整值的列表。

这是我尝试过的:

x = matrix(5,3,5) # creating example
x = as.data.frame(x)
op2 = list(x,x,x)
rep_totals = matrix(5,3,3)

gt_freqs <- replicate(length(op2), matrix(0, 3, 5), simplify = FALSE)
for(i in seq_along(op2)) for(j in seq_along(op2[[1]][1:3,])) gt_freqs[[i]] <- op2[[i]][j,]/rep_totals[i,j]

所以在这个例子中,预期的输出将是 3 个与op2 大小相同的数据帧,除了值都将调整为 1

提前感谢您的帮助!

【问题讨论】:

    标签: r loops matrix indexing bioinformatics


    【解决方案1】:

    我们可以使用Map

    Map(`/`,op2, asplit(rep_totals, 1))
    

    使用for 循环,它将是

    for(i in seq_along(op2)) get_freqs[[i]] <- op2[[i]]/rep_totals[i,]
    

    【讨论】:

    • 谢谢!我一定是在脑海中翻转了矩阵,因为当我将asplit 的边距更改为 2 时,它就像一个魅力。
    • @eabrown2378 用MARGIN = 2,是按列拆分,我假设你要按行拆分,所以用MARGIN = 1
    猜你喜欢
    • 2018-12-02
    • 2020-05-22
    • 2021-07-27
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多