我有data.frame
我要删除第5列条目等于零的行。
data.frame
看起来像这样:
Column1 Column2 Column3 Column4 Column5 Column6
1 A 3 2 1 1
2 D 2 2 4 1
3 D 4 1 0 2
4 E 4 1 0 2
5 F 2 1 A 3
因此,在这种情况下,应删除第3列和第4列。我的数据框称为
dataframe,目前我使用以下代码:
for(i in 1:length(dataframe[,1])){
if (dataframe[i,5]==0) {
dataframe2<-dataframe[-i,]
}
}
问题是我有162000个条目,我的代码需要很长时间。那么我怎样才能快速实现呢?
答案 0 :(得分:2)
我想:
dataframe2 <- dataframe[dataframe[,5]!=0,]
或
dataframe2 <- dataframe[dataframe[,"Column5"]!=0,]
或
dataframe2 <- subset(dataframe, Column5 != 0)
正如@dickoa建议您也可以使用$
索引:
dataframe2 <- dataframe[dataframe$Column5 != 0,]
一般来说:
[[]]
或[,]
进行索引比使用$
进行索引更为健壮和通用(例如,您可以使用动态构造的变量名或{{1}中的数字索引只有[[]]
$
是最具可读性的,但在某些情况下不太健壮对于您所描述的尺寸问题,所有这些方法在速度方面应该或多或少地瞬间/无法区分。
答案 1 :(得分:1)
您应该阅读介绍性手册以了解基本的子集
df <- df[df$Column5 != 0, ]
## Column1 Column2 Column3 Column4 Column5 Column6
## 1 1 A 3 2 1 1
## 2 2 D 2 2 4 1
## 5 5 F 2 1 A 3
希望它有所帮助。