如果您只有100 rows,您可以在base R 中执行此操作
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))
最好将其作为 data.frames 的列表。但是,如果您在全局环境中需要单独的 data.frame 对象。
list2env(lst, envir=.GlobalEnv)
#<environment: R_GlobalEnv>
df6001
# HISPn Freq
#1 1 323307
#2 2 1154673
或者你可以使用reshape 来自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
数据
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))