应用函数从数据框列创建数据集
Apply Function to create dataset from the dataframes column
我有如下所示的数据集
挑战在于对从第 3 列到最后的列应用函数。
该函数应过滤数据集,列只有 false 并按名称作为列名称创建数据框,如下所示的第 3 列和第 4 列
并且有很多可用的列,我必须使用应用功能。谁能给个解决办法
其余列依此类推。
我们可以使用 Map
创建一个 list
of 'data.frame`s
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")
这将为您提供每个变量的子集。 TRUE 和 FALSE 的。希望这对你也有帮助!
我将解释代码,因为您可能需要对其进行更改才能使用您的数据。请分享可重现的数据供我们直接处理!
我从第 3 列开始迭代,对于每一列,我将 dlply 应用于 groupby TRUE/FALSE
library(plyr)
l=lapply(3:dim(df)[2], function(i) dlply(df[c(1:2,i)], colnames(df)[i])$`FALSE`)
names(l) <- colnames(df)[3:dim(df)[2]]
当需要使用 Colnames 而不是列索引时,这将被解决,但是只是额外的功能 @joel.wilson 所做的
colmnnames <- c('COLUMN1','COLUMN2')
c <- setdiff(colnames(dataset),colmnnames)
l <- lapply(1:length(c), function(i) dlply(dataset[c(colmnnames,c[i])],colnames(dataset)[grep(c[i],colnames(dataset))])$`FALSE`)
names(l) <- c
l
我有如下所示的数据集
挑战在于对从第 3 列到最后的列应用函数。 该函数应过滤数据集,列只有 false 并按名称作为列名称创建数据框,如下所示的第 3 列和第 4 列 并且有很多可用的列,我必须使用应用功能。谁能给个解决办法
其余列依此类推。
我们可以使用 Map
创建一个 list
of 'data.frame`s
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")
这将为您提供每个变量的子集。 TRUE 和 FALSE 的。希望这对你也有帮助!
我将解释代码,因为您可能需要对其进行更改才能使用您的数据。请分享可重现的数据供我们直接处理! 我从第 3 列开始迭代,对于每一列,我将 dlply 应用于 groupby TRUE/FALSE
library(plyr)
l=lapply(3:dim(df)[2], function(i) dlply(df[c(1:2,i)], colnames(df)[i])$`FALSE`)
names(l) <- colnames(df)[3:dim(df)[2]]
当需要使用 Colnames 而不是列索引时,这将被解决,但是只是额外的功能 @joel.wilson 所做的
colmnnames <- c('COLUMN1','COLUMN2')
c <- setdiff(colnames(dataset),colmnnames)
l <- lapply(1:length(c), function(i) dlply(dataset[c(colmnnames,c[i])],colnames(dataset)[grep(c[i],colnames(dataset))])$`FALSE`)
names(l) <- c
l