我有一个空行的数据集.我想删除它们:
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行.
我做错了什么?这对我来说似乎毫无意义.
我在看似简单的任务时遇到了一些问题:删除所有变量都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)
但这看起来并不太好,虽然它完成了工作.其他想法?