R:列表中数据帧元素列的测试条件;返回较小的列表

R:列表中数据帧元素列的测试条件;返回较小的列表,r,list,function,split,dataframe,R,List,Function,Split,Dataframe,我的目标是获取数据帧列表,查看数据帧的特定列的最大值是否为0,如果是,请从列表中删除该数据帧 现在我正在循环列表中的名字。考虑到这是R,一定有更好的方法。我觉得我需要通过lappy()应用一些函数来实现这一点。我也考虑过ddply(),但我认为这可能有点过头了。以下是我到目前为止的情况: # Make df of First element myColumn <- rep ("ElementA",times=10) values <- seq(1,10) a <- data.f

我的目标是获取数据帧列表,查看数据帧的特定列的最大值是否为0,如果是,请从列表中删除该数据帧

现在我正在循环列表中的名字。考虑到这是R,一定有更好的方法。我觉得我需要通过
lappy()
应用一些函数来实现这一点。我也考虑过
ddply()
,但我认为这可能有点过头了。以下是我到目前为止的情况:

# Make df of First element
myColumn <- rep ("ElementA",times=10)
values <- seq(1,10)
a <- data.frame(myColumn,values)
# Make df of second element
myColumn <- rep ("ElementB",times=10)
values <- rep(0,10)
b <- data.frame(myColumn,values)

# Bind the dataframes together
df <- rbind(a,b)

#Now split the dataframes based on element name
myList <- split(df,df$myColumn)

# Now loop through element lists and check for max of 0 in values
for (name in names(myList)) { # Loop through List  
  if (max(myList[[name]]$values) == 0) { # Check Max for 0
      myList <- myList[[-names]] # If 0, remove element from list
  } # Close If
} # Close Loop

Error in -names : invalid argument to unary operator
#制作第一个元素的df
myColumn您可以使用:

myList <- myList[sapply(myList, function(d) max(d$values) != 0)]
myList <- myList[sapply(myList, function(d) if(nrow(d)==0) FALSE else max(d$values)!=0)]

所有数据帧中是否有相同的列?是的。所有数据帧中都有相同的列。为了让您了解替代解决方案,请使用
base
R、
plyr
以及
data.table
,您可以在这里查看我类似问题的几个非常好的答案:,Henrik-非常感谢您的评论。你的帖子确实提供了有用的代码,让我更接近我真正想要的东西(但没有要求上面)。下面的代码给出了一个数据帧,其中没有那些不符合我的测试条件的列表元素数据帧<代码>短DF 0)