我想删除此数据框中的行:
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 …
可能重复:
删除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) 我在看似简单的任务时遇到了一些问题:删除所有变量都NA使用dplyr的所有行.我知道可以使用基本R(删除R矩阵中的所有数据为NA并删除R中数据文件的空行)来完成,但我很想知道是否有一种简单的方法可以使用dplyr .
例:
library(tidyverse)
dat <- tibble(a = c(1, 2, NA), b = c(1, NA, NA), c = c(2, NA, NA))
filter(dat, !is.na(a) | !is.na(b) | !is.na(c))
Run Code Online (Sandbox Code Playgroud)
filter上面的调用做了我想要的但是在我面临的情况下它是不可行的(因为有大量的变量).我想可以通过使用filter_并首先使用(长)逻辑语句创建一个字符串来实现它,但似乎应该有一个更简单的方法.
另一种方法是使用rowwise()和do():
na <- dat %>%
rowwise() %>%
do(tibble(na = !all(is.na(.)))) %>%
.$na
filter(dat, na)
Run Code Online (Sandbox Code Playgroud)
但这看起来并不太好,虽然它完成了工作.其他想法?
为什么第一行工作而第二行不工作?我在文档中找不到如何使用哪个来选择数据的原因虽然我偶然发现我需要一个逗号.
sigData <- data[which(abs(data$wc2) > 3*wc2_sd),]
sigData <- data[which(abs(data$wc2) > 3*wc2_sd)]
Run Code Online (Sandbox Code Playgroud) 灵感来自Q6437164:有人可以向我解释为什么以下工作:
iriscopy<-iris #or whatever other data.frame
iriscopy$someNonExistantColumn[1]<-15
Run Code Online (Sandbox Code Playgroud)
对我而言,似乎并不明白R如何将此语句解释为:someNonExistantColumn在data.frame中创建一个名为new的新列,并将第一个值(实际上是所有值,如图所示)设置为值15.
我有一个数据框,其中只有一些行全部为 NA。如何遍历并删除所有这些行?我试过 na.omit() 但这不起作用。在这个例子中,我需要删除第 3 行和第 5 行
x1 <- c("Bob", "Mary","","Jane","")
x2 <- c("Bob","Mary","","Jane","")
x3 <- c("Bob", "Mary","","Jane","")
x4 <- c("Bob","Mary","","Jane","")
df <- data.frame(x1,x2,x3,x4)
df <- df %>% na.omit()
Run Code Online (Sandbox Code Playgroud)