我正在尝试向现有数据框添加一个新列,该数据框显示二进制矩阵中的一个数字。现有数据框中的一列具有我想要查找其计数/总和的矩阵名称。
例如,
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)
我需要从mat
数据框中查找MatA, MatB, MatC
列值,例如df
,以匹配矩阵名称MatA, MatB, MatC
,并返回1的数字每个二进制矩阵都添加到新列中的df
数据帧中。
我尝试使用循环,应用函数,但我们迷失了如何使用MatA
中的列值df$mat
作为矩阵名MatA
的查找并返回sum(MatA==1)
数据框df
中的新列。
答案 0 :(得分: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