我正在尝试从数据框中删除行。
我需要删除在我提供的整个列范围内只有 个“ NONE”或空白的行。需要删除的行必须满足以下条件:1.仅“ NONE”和空白或所有“ NONE”或所有空白的组合。
因为有些情况下某些列中有“ NONE”或空白是可以的,所以我不能像在csv中读取行那样仅仅滤除行
dataframe$col1 =="NONE" | str_length(dataframe$col1)==0
我知道这通常是一个简单的问题,我可以运行一个for循环,将数据帧中的所有“ NONE”值和空格都转换为NA,并在需要的任何列上使用complete.cases
({{3} }。但是,特别要求我使用不更改值的方法。有什么建议么?
编辑:我没有数据,但这是一个数据框的虚构示例,与我必须使用的数据类似
在此数据框中,唯一必须删除的行是第3行(如果包含标题,则为第4行)。
最终的数据集将比这个组成的示例多得多的列
答案 0 :(得分:2)
我建议使用dplyr软件包(tidyverse库的一部分)中的filter()
命令。看起来像这样:
dataframe_new <- filter(dataframe, col1 == "" | str_length(col1) == 0)
答案 1 :(得分:2)
由于需要删除具有NONE和空格的行,因此将是:
dataframe <- filter(dataframe, col1 != "NONE" & str_length(col1) != 0)
答案 2 :(得分:2)
您可以使用dplyr::filter_all()
完成此操作:
library(dplyr)
df <- data.frame(column.1 = c('a', 'b', 'NONE', 'b', 'b'),
column.2 = c('a', 'b', '', 'b', 'b'),
column.3 = rep('', 5),
column.4 = rep('', 5),
column.5 = rep('', 5))
df %>%
filter_all(any_vars(. != 'NONE' & . != ''))
答案 3 :(得分:1)
function resize() {
mainCanvas.width = window.innerWidth;
mainCanvas.height = window.innerHeight;
ctx.setTransform(1, 0, 0, 1, 0, 0);
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
ctx.scale(window.innerWidth/canvasWidth, window.innerHeight/canvasHeight);
//transX and transY are the amount needed to transform the canvas
//so the character is in the centre of the screen
ctx.translate(transX, transY);
}
function draw() {
//gets called every frame
//draws everything on canvas
mainCtx.clearRect(0, 0, mainCanvas.width, mainCanvas.height);
mainCtx.drawImage(canvas, 0, 0);
}
现在您可以对其进行测试:
is.none <- function(x) tolower(x) == "none"
is.whitespace <- function(x) grepl("^\\s+$", x)
is.empty <- function(x) length(x) == 0 || x == "" || is.na(x) || is.nan(x)
is.none.whitespace.empty <- function(x) is.none(x) || is.whitespace(x) || is.empty(x)
is.none.whitespace.empty <- Vectorize(is.none.whitespace.empty)
remove.empty.rows <- function(df, cols) {
df[!sapply(1:nrow(df),
function(i) all(is.none.whitespace.empty(df[i, cols]))), ]
}