Удалите повторяющиеся строки, значения которых совпадают со значениями заголовка столбца.

Мои данные выглядят примерно так:

    +--------+--------+--------+
| region |  name  | salary |
+--------+--------+--------+
| west   | raj    | 100    |
| north  | simran | 150    |
| region | name   | salary |
| east   | prem   | 250    |
| region | name   | salary |
| south  | preeti | 200    |
+--------+--------+--------+

Имена заголовков моих столбцов повторяются в строках № 3 и 5. Как я могу удалить строки № 3 и 5, используя R, и сохранить заголовок столбца таким, какой он есть, чтобы мои выходные данные выглядели так:

+--------+--------+--------+
| region |  name  | salary |
+--------+--------+--------+
| west   | raj    |    100 |
| north  | simran |    150 |
| east   | prem   |    250 |
| south  | preeti |    200 |
+--------+--------+--------+

Предполагая, что в моих исходных данных слишком много строк, я не хочу просто выбирать номера строк и удалять их с помощью команды Data[-c(3, 5), ]

3 ответа

Решение

Вот простое решение

x <- data.frame(x =c("a", "b", "c", "x"), z = c("a", "b", "c", "z"))
## identify rows which match colnames 
matched <- apply(x,1, function(i) i[1] %in% colnames(x) && i[2] %in% colnames(x))

## Take the inverse of the match
x[!matched,]

Предполагая, salary числовое поле, вы можете просто сделать это -

# assuming df is your dataframe

clean_df <- df[!is.na(as.numeric(df$salary)), ]

Используйте str_detect() с фильтром, чтобы удалить эти строки.

library(tidyverse)
df <- tibble(
    region = c("west", "north", "region", "east","region","south"),
    name = c("raj", "simran","name","prem", "name","preeti"),
    salary = c("100","150","salary","250","salary","200")
)

df_2 <- df %>%
    filter(!str_detect(salary,"[Aa-zZ]"))

df_2

Или вы можете использовать базу R

df_2 <- df[-grep("[Aa-zZ]",df$salary),]
df_2
Другие вопросы по тегам