📌  相关文章
📜  删除 R 中带有空单元格的行

📅  最后修改于: 2022-05-13 01:54:58.681000             🧑  作者: Mango

删除 R 中带有空单元格的行

数据帧可能包含属于不同数据类型的元素作为单元格。但是,它可能包含空白行或所有列中包含缺失值的行。这些行相当于虚拟记录,称为空行。有多种方法可以删除它们。

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

声明了一个向量以保留包含所有空白值的所有行的索引。 for 循环迭代是在数据帧的行上完成的。计数器设置为 0 以存储每行中的所有空白值。另一个迭代是通过列完成的。将单元格值与空白值进行比较,如果满足条件,则计数器递增。在每次内循环迭代后,计数器值与数据帧中的列数进行比较。如果这些值相等,则行索引将附加到向量。在外循环结束后,使用行索引向量前面的“-”删除向量中存储的行索引。

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

例子:

R
# 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
# 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
# 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 )


输出

[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

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

R 中的 apply() 方法用于在 R 对象、向量、数据帧或矩阵上应用指定的函数。此方法返回通过将函数应用于数组或矩阵的对应项而获得的向量或数组或值列表。

数据框受到的约束是检查单元格值是否不是“”,即空白。在这种方法中,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 )

输出

[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

方法 3:删除全为 NA 的行

数据帧可以由缺失值或包含在单元格值替换中的 NA 组成。这种方法使用许多内置的 R 方法来删除所有带有 NA 的行。

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

句法:

  • 使用 is.na() 方法检查单个单元格值是否为 NA。数据帧作为参数传递给此方法。它返回一个维度与原始数据帧相同的数据帧。它由逻辑值组成,如果值为 NA,则为 TRUE,否则为 FALSE。

句法:

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

句法:

  • 每行的 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 )

输出

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