0

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

现在我正在遍历列表的名称。鉴于这是 R,必须有更好的方法。我觉得我需要应用一些功能lapply()才能做到这一点。我也考虑过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

我已经在循环外测试了我的代码,这一切似乎都有效。
任何帮助是极大的赞赏。谢谢!

4

1 回答 1

0

你可以使用这个:

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

而不是for()循环。这将允许传递具有零行的数据帧,并发出警告。

为确保删除空数据框,请使用以下命令:

myList <- myList[sapply(myList, function(d) if(nrow(d)==0) FALSE else max(d$values)!=0)]
于 2013-08-13T18:37:29.933 回答