2017-08-16 39 views
1

我正在尝试向现有数据框中添加一个新列,该数据框显示二进制矩阵中的数字。现有数据框中的一列具有矩阵名称,其计数/总和我正试图找到。R - 使用数据帧中的列值来查找矩阵名称并总结矩阵

例如,

r <- 10 
c <- 10 
MatA <- matrix(sample(0:1,r*c, replace=TRUE),r,c) 
MatB <- matrix(sample(0:1,r*c, replace=TRUE),r,c) 
MatC <- matrix(sample(0:1,r*c, replace=TRUE),r,c) 

mat <- c("MatA","MatB","MatC") 
size <- c(4,6,10) 
df <- data.frame(mat,size) 

我需要从df数据帧查找的mat列值如MatA, MatB, MatC以匹配矩阵名称MatA, MatB, MatC并且在每个二进制矩阵的返回1倍的数量加入到df数据框放在新列中。

我试着用循环,应用功能,但在如何使用的列值MatAdf$mat为矩阵名MatA查找和数据帧df返回sum(MatA==1)新列很失落。

回答

0

使用get由串来引用变量

set.seed(7) 
df$binary <- lapply(mat, function(x) sum(get(x))) 

要使用data.frame柱如果存储作为因子

df$binary <- lapply(levels(df$mat)[df$mat], function(x) sum(get(x))) 

要存储列作为字符串和不因素

df <- data.frame(mat, size, stringsAsFactors = FALSE) 
df$binary <- lapply(df$mat, function(x) sum(get(x))) 

> df 
    mat size binary 
1 MatA 4  47 
2 MatB 6  58 
3 MatC 10  54 
+0

谢谢,我试图在不使用'get'引用的情况下使用'lapply'。它的作品非常漂亮。 – user6529266