繁体   English   中英

如何基于R中的索引填充空白数据框?

[英]How do you fill in an empty data frame based on an index in R?

我试图创建一个空的数据框,然后基于此for循环将其填充。

我想要一个尺寸为5x10的数据框,其中包含向量A和B中每个数字相乘的结果。

这就是我想要的最终数据帧的样子。

这就是我想要的最终数据帧的样子。

到目前为止,我正在使用for循环来计算2个向量的乘积,但无法将所需的结果插入数据帧。

我要去哪里错了?

我的代码:

a <- c(1:10)
b <- c(1:5)

#Make a dummy dataframe filled with zeros, thats length(a) long and length(b) high     
dummy <- as.data.frame(matrix(0, ncol=5, nrow=10))

heatmap_prep <- function(vector_a,vector_b){
        for (i in 1:length(a)){
            first_number <- a[i]
        for(j in 1:length(b)){
            second_number <- b[j]
            result <- first_number*second_number
            dummy [i,j] <- result
            print(result)
        }
    }
}

谢谢!

函数不会在函数外部进行修改。 您应该在函数内部创建dummy ,并在函数末尾return最终的修改版本:

heatmap_prep <- function(vector_a,vector_b){
    dummy <- as.data.frame(matrix(0, ncol=length(vector_b), nrow=length(vector_a)))
    for (i in 1:length(a)){
        first_number <- a[i]
        for(j in 1:length(b)){
            second_number <- b[j]
            result <- first_number*second_number
            dummy [i,j] <- result
            print(result)
        }
    }
    return(dummy)
}
heatmap_prep(a, b)
#    V1 V2 V3 V4 V5
# 1   1  2  3  4  5
# 2   2  4  6  8 10
# 3   3  6  9 12 15
# 4   4  8 12 16 20
# 5   5 10 15 20 25
# 6   6 12 18 24 30
# 7   7 14 21 28 35
# 8   8 16 24 32 40
# 9   9 18 27 36 45
# 10 10 20 30 40 50

但是,在这种情况下,内置的outer功能要简洁得多。 输出是一个matrix ,但是您可以轻松地将其强制为data.frame

outer(a, b)
#       [,1] [,2] [,3] [,4] [,5]
#  [1,]    1    2    3    4    5
#  [2,]    2    4    6    8   10
#  [3,]    3    6    9   12   15
#  [4,]    4    8   12   16   20
#  [5,]    5   10   15   20   25
#  [6,]    6   12   18   24   30
#  [7,]    7   14   21   28   35
#  [8,]    8   16   24   32   40
#  [9,]    9   18   27   36   45
# [10,]   10   20   30   40   50

您也可以将这个问题视为矩阵乘法。 这将产生相同的结果。

 a %*% t(b)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM