首页 > 解决方案 > 在R中查找矩阵中元素的频率

问题描述

我有 7 行 4 列的数据集“数据”,如下所示:

var1       var2    var3    var4
    A        C      
    A        C       B  
    B        A       C       D
    D        B  
             B  
    D        B      
    B        C  

我想根据我拥有的数据创建下表“Mat”:

A   B   C   D
1       1   
1   1   1   
1   1   1   1
    1       1
    1       
    1       1
    1   1   1

基本上,我从原始数据中获取了唯一元素并创建了一个矩阵“Mat”,其中 Mat 中的行数=Data 中的行数,“Mat”中的列数=Data 中唯一元素的数量(即 A , B, C, D)

我在 R 中编写了以下代码:

 rule <-c("A","B","C","D")

 mat<-matrix(, nrow = dim(data)[1], ncol = dim(rule)[1])

 mat<-data.frame(mat)

 x<-rule[,1]

 nm<-as.character(x)

 names(mat)<-nm

 n_data<-dim(data)[1]

 for(i in 1:n_data)

    {

      for(j in 2:dim(data)[2])

            {

                  for(k in 1:dim(mat)[2])

                    {

                          ifelse(data[i,j]==names(mat)[k],mat[i,k]==1,0)

                  }

          }

   }

我在“垫子”中得到了所有的 NA。此外,运行时间太长,因为在我的原始数据集中,“Mat”中有 20,000 行和 100 列。

任何建议将不胜感激。谢谢!

标签: r

解决方案


通过使用 tablerep

table(rep(1:nrow(df),dim(df)[2]),unlist(df))
  A B C D
1 1 0 1 0
2 1 1 1 0
3 1 1 1 1
4 0 1 0 1
5 0 1 0 0
6 0 1 0 1
7 0 1 1 0

推荐阅读