应用函数从数据框列

时间:2016-11-29 05:29:02

标签: r apply lapply sapply mapply

我有一个如下所示的数据集

Given Dataset

挑战在于将功能应用于从第3列到结束的列。 函数应该过滤数据集,列只有false,并按名称创建数据框作为列名,如下所示第3列和第4列 并且有很多列可用,我必须使用apply函数。任何人都可以提供解决方案。

Dataframe from 3rd column Dataframe from 4th column

依此类推其他专栏。

3 个答案:

答案 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