如何匹配数据框中的每一行并使用这些信息填充矩阵?

时间:2016-07-12 21:19:22

标签: r matrix dataframe

我有一个数据帧'df',它由2列组成:Name& ID。
df 的值为:
名称ID
A 001
B 004
C 004
D 006 <我有一个矩阵 Mat (初始化为0),其中包含所有名称作为行和所有可能的ID(包括不在<的ID) strong> df ,例如002和005)作为列。我想要做的是将每个名称与 df 中的ID匹配,并将1放在 Mat 中的特定位置。

Mat 的结构为:001 002 003 004 005 006 007
A A
B
C D
E E

这是我的第一个问题。对任何无意的错误道歉。

1 个答案:

答案 0 :(得分:1)

将来,请加入MWE,就像我在下面所做的那样。

您应该能够:

class B {
    private(set) var a: A!
    init() {
        //initialize all instance properties till here
        a = A(closure: {[weak self] in self?.action(1)})
    }

    func action(i: Int) {
        //...
    }
}

特别注意df <- data.frame( Name = LETTERS[1:5] , ID = formatC(c(1,4,4,6,7), width = 3, flag = "0") , stringsAsFactors = FALSE ) Mat <- matrix(0, nrow = 5, ncol = 7 , dimnames = list(LETTERS[1:5] , formatC(1:7, width = 3, flag = "0"))) for(i in 1:nrow(df)){ Mat[df$Name[i], df$ID[i]] <- Mat[df$Name[i], df$ID[i]] + 1 } Mat 。没有它,您需要在stringsAsFactors == FALSE中包含df$Namedf$ID,否则它们将成为因子并以数字形式返回其索引而不是字符标签。

我还在该位置添加了1而不是仅将其设置为“1”,因为从您的问题中不清楚是否可能有重复项。如果没有重复项,可能会有更优雅的方法,特别是如果没有重复的ID(如@alistaire建议的as.character解决方案),但如果有重复项并且您没有重复项,则可能会失败对他们的明确处理。

编辑:我是如何完成这一切并没有意识到我正在重新创建diag,直到我阅读@ alistaire的编辑评论?

现在你想要这些因素:

table