【问题标题】:R fill matrix based on element names from data frameR根据数据框中的元素名称填充矩阵
【发布时间】:2016-06-20 20:17:21
【问题描述】:

如果我有可以这样建模的数据:

a1 <- c("bob","bill",0.2)
a2 <- c("bob", "bert", 0.1)
a3 <- c("bill", "bert", 0.1)

my.df <- as.data.frame(rbind(a1, a2, a3), stringsAsFactors = FALSE)

colnames(my.df) <- c("name_1", "name_2", "value")
row.names(my.df) <- NULL

my.names <- unique(as.character(c(my.df$name_1, my.df$name_2)))

my.matrix <- matrix(0, nrow = length(my.names), ncol = length(my.names))

row.names(my.matrix) <- my.names

colnames(my.matrix) <- my.names

如何使用my.df 中的值填写my.matrixmy.df中的前两列描述了my.matrix的坐标要填写?

【问题讨论】:

    标签: r matrix dataframe


    【解决方案1】:

    您可以将my.df 的前两列强制转换为索引矩阵,并将my.matrix 的剩余列作为RHS 进行索引分配:

    my.matrix[as.matrix(my.df[c('name_1','name_2')])] <- as.double(my.df$value);
    my.matrix;
    ##      bob bill bert
    ## bob    0  0.2  0.1
    ## bill   0  0.0  0.1
    ## bert   0  0.0  0.0
    

    我还将 RHS 强制为双精度,因为我假设您想保留 my.matrix 的类型。

    【讨论】:

    • 非常感谢!这对真实数据最有效,我能够轻松地对其进行调整以填充矩阵的另一半。
    • 我有一个后续问题,当数据丢失时是否可以将单元格设置为空而不是0?
    【解决方案2】:

    使用for 循环的简单解决方案:

    my.df$value <- as.numeric(my.df$value)
    for (i in 1:nrow(my.df)) {
       my.matrix[rownames(my.matrix) == my.df$name_1[i], 
                 colnames(my.matrix) == my.df$name_2[i]] <- my.df$value[i]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      相关资源
      最近更新 更多