我想删除此数据框中的行:
a)包含NA所有列的s.下面是我的示例数据框.
gene hsap mmul mmus rnor cfam
1 ENSG00000208234 0 NA NA NA NA
2 ENSG00000199674 0 2 2 2 2
3 ENSG00000221622 0 NA NA NA NA
4 ENSG00000207604 0 NA NA 1 2
5 ENSG00000207431 0 NA NA NA NA
6 ENSG00000221312 0 1 2 3 2
Run Code Online (Sandbox Code Playgroud)
基本上,我想获得如下的数据框.
gene hsap mmul mmus rnor cfam
2 ENSG00000199674 0 2 2 2 2
6 ENSG00000221312 0 1 2 3 2
Run Code Online (Sandbox Code Playgroud)
b)只在某些列中包含NAs …
我有一个空行的数据集.我想删除它们:
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行.
我做错了什么?这对我来说似乎毫无意义.
可能重复:
删除R中数据文件的空行
如何从矩阵或数据框中删除行,其中行中的所有元素都是NA?
所以要从中得到:
[,1] [,2] [,3]
[1,] 1 6 11
[2,] NA NA NA
[3,] 3 8 13
[4,] 4 NA NA
[5,] 5 10 NA
Run Code Online (Sandbox Code Playgroud)
对此:
[,1] [,2] [,3]
[1,] 1 6 11
[2,] 3 8 13
[3,] 4 NA NA
[4,] 5 10 NA
Run Code Online (Sandbox Code Playgroud)
因为na.omit的问题是它删除了任何 NAs的行,所以会给我这个:
[,1] [,2] [,3]
[1,] 1 6 11
[2,] 3 8 13
Run Code Online (Sandbox Code Playgroud)
到目前为止我能做的最好的是使用apply()函数:
> x[apply(x, 1, function(y) !all(is.na(y))),]
[,1] [,2] [,3]
[1,] 1 6 11
[2,] 3 8 13 …Run Code Online (Sandbox Code Playgroud) 这是一个示例数据集:
id <- c("Item1","Item2","Item3","Item4","Item5","Item6")
var1 <- c(2,3,NA,NA,5,6)
var2 <- c(NA,3,5,NA,5,NA)
var3 <- c(NA,3,4,NA,NA,6)
test <- data.frame(id, var1, var2, var3)
Run Code Online (Sandbox Code Playgroud)
我想过滤掉 var1、var2 和 var3 都是 na 的地方。我知道可以这样做:
test1 <- test %>% filter(!(is.na(var1) & is.na(var2) & is.na(var3)))
test1
id var1 var2 var3
1 Item1 2 NA NA
2 Item2 3 3 3
3 Item3 NA 5 4
4 Item5 5 5 NA
5 Item6 6 NA 6
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?