我有一个空行的数据集.我想删除它们:
myData<-myData[-which(apply(myData,1,function(x)all(is.na(x)))),]
Run Code Online (Sandbox Code Playgroud)
它运作正常.但是现在我想在我的数据中添加一个列并初始化第一个值:
myData$newCol[1] <- -999
Error in `$<-.data.frame`(`*tmp*`, "newCol", value = -999) :
replacement has 1 rows, data has 0
Run Code Online (Sandbox Code Playgroud)
不幸的是它不起作用,我不明白为什么,我无法解决这个问题.当我使用以下方法一次删除一行时,它工作正常:
TgData = TgData[2:nrow(TgData),]
Run Code Online (Sandbox Code Playgroud)
或类似的东西.
当我只使用前13000行时,它也可以工作.
但它不适用于我的实际数据,有32.000行.
我做错了什么?这对我来说似乎毫无意义.
Woo*_*kai 90
我假设您要删除所有NA的行.然后,您可以执行以下操作:
data <- rbind(c(1,2,3), c(1, NA, 4), c(4,6,7), c(NA, NA, NA), c(4, 8, NA)) # sample data
data
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 NA 4
[3,] 4 6 7
[4,] NA NA NA
[5,] 4 8 NA
data[rowSums(is.na(data)) != ncol(data),]
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 NA 4
[3,] 4 6 7
[4,] 4 8 NA
Run Code Online (Sandbox Code Playgroud)
如果要删除至少有一个NA的行,只需更改条件:
data[rowSums(is.na(data)) == 0,]
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 6 7
Run Code Online (Sandbox Code Playgroud)
Ale*_*sky 40
如果您有空行而不是NA,则可以执行以下操作:
data[!apply(data == "", 1, all),]
Run Code Online (Sandbox Code Playgroud)
要删除(NAs和空):
data <- data[!apply(is.na(data) | data == "", 1, all),]
Run Code Online (Sandbox Code Playgroud)
sbh*_*bha 15
以下是一些dplyr选项:
# sample data
df <- data.frame(a = c('1', NA, '3', NA), b = c('a', 'b', 'c', NA), c = c('e', 'f', 'g', NA))
library(dplyr)
# remove rows where all values are NA:
df %>% filter_all(any_vars(!is.na(.)))
df %>% filter_all(any_vars(complete.cases(.)))
# remove rows where only some values are NA:
df %>% filter_all(all_vars(!is.na(.)))
df %>% filter_all(all_vars(complete.cases(.)))
# or more succinctly:
df %>% filter(complete.cases(.))
df %>% na.omit
# dplyr and tidyr:
library(tidyr)
df %>% drop_na
Run Code Online (Sandbox Code Playgroud)
rad*_*dek 12
NA使用janitor包的s行的替代解决方案
myData %>% remove_empty("rows")
Run Code Online (Sandbox Code Playgroud)