user6529266 user6529266 - 1 year ago 33
R Question

R - Using column value in data frame to lookup matrix name and summarize matrix

I am trying to add a new column to an existing data frame which shows the number of one's in a binary matrix. One column in the existing data frame has the the matrix names whose count/sum I am trying to find.

For example,

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)


I need to lookup the
mat
column values such as
MatA, MatB, MatC
from
df
dataframe to match the matrix names
MatA, MatB, MatC
and return the number of 1's in each of the binary matrix added to the
df
dataframe in a new column.

I tried using loops, apply functions but am lost at how to use the column values
MatA
from
df$mat
as a lookup for matrix name
MatA
and return
sum(MatA==1)
to new column in dataframe
df
.

Answer Source

Use get to reference variable by string

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

To use the data.frame column if stored as factors

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

To store column as strings and not factors

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
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download