我们可以使用Map创建一个'data.frame`s的list
nm1 <- names(df1)[3:ncol(df1)]
lst <- setNames(Map(function(x,y) {
x1 <- cbind(df1[1:2], x)[!x,]
names(x1)[3] <- y
x1 },
df1[3:ncol(df1)], nm1), nm1)
lst
#$LOGICCOLUMN1
# COLUMN1 COLUMN2 LOGICCOLUMN1
#6 FFFF jjjj FALSE
#8 HHHH BBBB FALSE
#$LOGICCOLUMN2
# COLUMN1 COLUMN2 LOGICCOLUMN2
#1 AAAA EEEE FALSE
#4 DDDD HHHH FALSE
#5 EEEE llll FALSE
#$LOGICCOLUMN3
# COLUMN1 COLUMN2 LOGICCOLUMN3
#2 BBBB FFFF FALSE
#8 HHHH BBBB FALSE
#10 jjjj DDDD FALSE
最好将其保留为列表。但是如果我们真的需要在全局环境中有对象(不推荐)
list2env(lst, .GlobalEnv)
LOGICCOLUMN1
# COLUMN1 COLUMN2 LOGICCOLUMN1
#6 FFFF jjjj FALSE
#8 HHHH BBBB FALSE
数据
df1 <- structure(list(COLUMN1 = c("AAAA", "BBBB", "CCCC", "DDDD", "EEEE",
"FFFF", "GGGG", "HHHH", "llll", "jjjj"), COLUMN2 = c("EEEE",
"FFFF", "GGGG", "HHHH", "llll", "jjjj", "AAAA", "BBBB", "CCCC",
"DDDD"), LOGICCOLUMN1 = c(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE,
TRUE, FALSE, TRUE, TRUE), LOGICCOLUMN2 = c(FALSE, TRUE, TRUE,
FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE), LOGICCOLUMN3 = c(TRUE,
FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)), .Names = c("COLUMN1",
"COLUMN2", "LOGICCOLUMN1", "LOGICCOLUMN2", "LOGICCOLUMN3"), row.names = c(NA,
-10L), class = "data.frame")