2017-08-16 41 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