Удалите повторяющиеся строки, значения которых совпадают со значениями заголовка столбца.
Мои данные выглядят примерно так:
+--------+--------+--------+
| 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