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)
输出
[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对象、向量、数据帧或矩阵上应用一个指定的函数。该方法返回一个向量或数组,或通过将函数应用于数组或矩阵的相应部分而得到的数值列表。
语法: 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 )
输出
[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()方法检查数据框架的列数。
语法
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 )
输出
[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