我有一个如下所示的数据集
挑战在于将功能应用于从第3列到结束的列。 函数应该过滤数据集,列只有false,并按名称创建数据框作为列名,如下所示第3列和第4列 并且有很多列可用,我必须使用apply函数。任何人都可以提供解决方案。
依此类推其他专栏。
答案 0 :(得分:2)
我们可以使用Power
创建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
答案 1 :(得分:1)
这将给出每个变量的子集。 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]]
答案 2 :(得分:0)
当需要使用Colnames而不是列Index时,这将被解决,但是@ 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