You could do this in base R
if you have only 100 rows
lst <- setNames(lapply(seq_len(nrow(df)), function(i)
data.frame(HISPn=1:2, Freq=unlist(df[i,-1], use.names=FALSE))),
paste0('df', df$CTFIP))
It is better to have it as a list of data.frames. But, if you need separate data.frame
objects in the global environment.
list2env(lst, envir=.GlobalEnv)
#<environment: R_GlobalEnv>
df6001
# HISPn Freq
#1 1 323307
#2 2 1154673
Or you could use reshape
from base R
colnames(df)[-1] <- paste('Freq', 1:2, sep='.')
dfL <- reshape(df, direction='long', idvar='CTFIP',
varying=2:3, timevar='HISPn')
row.names(dfL) <- NULL
lst1 <- split(dfL[,-1], df$CTFIP)
names(lst1) <- paste0('df', names(lst1))
list2env(lst1, envir=.GlobalEnv)
df6001
# HISPn Freq
#1 1 323307
#7 2 1154673
data
df <- structure(list(CTFIP = c(6001L, 6003L, 6005L, 6007L, 6009L, 6011L
), Hispanic = c(323307L, 63L, 4566L, 29512L, 4595L, 11136L),
Non.Hispanic = c(1154673L, 1113L, 33761L, 189123L, 41399L,
10029L)), .Names = c("CTFIP", "Hispanic", "Non.Hispanic"), class = "data.frame",
row.names = c(NA, -6L))