我有一个数据框列表,想从 mylist 中删除少于 2 行的那些:
a<-data.frame(x=c(1:4),y=c("m", "n", "o", "p"))
b<-data.frame(x=c(2:6),y=c("q", "w", "e", "r", "t"))
c<-data.frame(x=c(6,7),y=c("j","k"),z=c("$","#"))
d<-data.frame(x="9",y="q",z="+")
mylist<-list(a,b,c,d)
for (i in length(mylist)){
if (nrow(mylist[[i]])<=2){
mylist<-mylist[-i]
}
else{
mylist<-myslit
}}
然而,它似乎只删除了 data.frame d。运行 for 循环后,数据框 c 仍在“mylist”中。
最佳答案
您可以使用应用循环更轻松地执行此操作:
row_lt2 <- which(sapply(mylist, nrow) < 2)
mylist[-row_lt2]
[[1]]
x y
1 1 m
2 2 n
3 3 o
4 4 p
[[2]]
x y
1 2 q
2 3 w
3 4 e
4 5 r
5 6 t
[[3]]
x y z
1 6 j $
2 7 k #
请注意,我使用负索引来删除项目而不是选择它们。
关于R 使用 if else 语句从列表中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16177486/