R语言 删除空单元格的行

R语言 删除空单元格的行

一个数据框架可能包含属于不同数据类型的元素作为单元格。然而,它可能包含空白行或包含所有列中缺失值的行。这些行相当于假记录,被称为空行。有多种方法可以删除它们。

方法1:使用for循环删除行

声明一个向量来保存所有包含所有空白值的行的索引。在数据框架的行上做一个for循环的迭代。一个计数器被设置为0来存储每一行的所有空白值。另一个迭代是通过列进行的。单元格的值与空白值进行比较,如果它满足条件,计数器就会增加。在每个内循环迭代之后,计数器的值与数据框架中的列数进行比较。如果这些值是相等的,那么行的索引就会被附加到向量上。在外循环结束后,存储在向量中的行指数被删除,使用行指数向量前面的’-‘。

这种方法的时间复杂度是O(m *n ),其中m是行的数量,n是列的数量。

例子

# declaring a dataframe
data_frame = data.frame(col1 = c("","b","","","e") , 
                        col2 = c("",2,"",4,5), 
                        col3= c("",FALSE,"","", TRUE))
  
print ("Original dataframe")
print (data_frame)
  
# declaring an empty vector to store 
# the rows with all the blank values
vec <- c()
  
# looping the rows
for (i in 1:nrow(data_frame)){
    
    # counter for blank values in 
    # each row
    count = 0
      
    # looping through columns
    for(j in 1:ncol(data_frame)){
      
        # checking if the value is blank
        if(isTRUE(data_frame[i,j] == "")){
            count = count + 1
        }
          
    }
    
    # if count is equivalent to number 
    # of columns
    if(count == ncol(data_frame)){
      
          # append row number
        vec <- append(vec,i)
    }
}
  
# deleting rows using index in vector
data_frame_mod <- data_frame[-vec, ] 
print ("Modified dataframe")
print (data_frame_mod)
R

输出

[1] "Original dataframe"
 col1 col2  col3
1                
2    b    2 FALSE
3                
4         4      
5    e    5  TRUE
[1] "Modified dataframe"
 col1 col2  col3
2    b    2 FALSE
4         4      
5    e    5  TRUE
R

方法2:使用apply方法删除R中所有空白单元格的行

R中的apply()方法用于在R对象、向量、数据帧或矩阵上应用一个指定的函数。该方法返回一个向量或数组,或通过将函数应用于数组或矩阵的相应部分而得到的数值列表。

语法: apply(df, axis, FUN, …)

参数:

df – 一个数据帧或矩阵

axis – 应用该函数的轴。对于一个数据框架,1表示行,2表示列,c(1, 2)表示行和列。

FUN – 要应用的函数。

数据框架受到的约束是检查单元格的值是否为””,也就是空白。在这种方法中,FUN等同于 “所有”,因为任何特定行的所有列都应该满足没有空白单元格值的条件。

例子

# declaring an empty dataframe
data_frame = data.frame(col1 = c("","b","","","e") , 
                        col2 = c("",2,"",4,5), 
                        col3= c("",FALSE,"","", TRUE))
  
print ("Original dataframe")
print (data_frame)
  
# checking where the cells are not all empty
data_frame_mod <- data_frame[!apply(data_frame == "", 1, all), ]  
print ("Modified dataframe")
print (data_frame_mod )
R

输出

[1] "Original dataframe"
 col1 col2  col3
1                
2    b    2 FALSE
3                
4         4      
5    e    5  TRUE
[1] "Modified dataframe"
 col1 col2  col3
2    b    2 FALSE
4         4      
5    e    5  TRUE
R

方法3:删除全部为NA的行

一个数据框架可以由缺失的值或替代单元格值的NA组成。这种方法使用许多内置的R方法来移除所有含有NA的行。

  • 可以使用ncol()方法检查数据框架的列数。

语法

ncol( df)

  • 通过使用is.na()方法,可以检查单个单元格的值是否为NA。数据框架被作为参数传递给该方法。它返回一个与原始数据框架尺寸相当的数据框架。它由逻辑值组成,如果值是NA,则为TRUE,否则为FALSE。

语法

na_df <- is.na(df)

  • rowSums()方法适用于由上一步获得的逻辑值组成的数据框架。它返回每一行中遇到的NA值的总和的计数。结果向量包含整数,表示每行的缺失值数量。

语法

rowSums(na_df)

  • 如果每行的na值之和不等同于列的数量,这些行将被存储在一个单独的变量中作为输出。如果两者相等,则意味着该特定行的所有列都含NA。

例子

# declaring an empty dataframe
data_frame = data.frame(col1 = c(NA,"b",NA,NA,"e") , 
                        col2 = c(NA,2,NA,4,5), 
                        col3= c(NA,FALSE,NA,NA, TRUE))
  
print ("Original dataframe")
print (data_frame)
  
# checking number of columns
cols <- ncol(data_frame)
  
# checking for which elements have 
# missing values
is_na <- is.na(data_frame)
  
# computes total number of nas 
# encountered in each row
row_na <- rowSums(is_na)
  
# checking where the cells are not 
# all NA
data_frame_mod <- data_frame[row_na != cols, ]  
print ("Modified dataframe")
print (data_frame_mod )
R

输出

[1] "Original dataframe"
 col1 col2  col3
1 <NA>   NA    NA
2    b    2 FALSE
3 <NA>   NA    NA
4 <NA>    4    NA
5    e    5  TRUE
[1] "Modified dataframe"
 col1 col2  col3
2    b    2 FALSE
4 <NA>    4    NA
5    e    5  TRUE
R

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程