удалить строку и отсортировать фрейм данных в R - PullRequest
0 голосов
/ 25 марта 2020

Я хочу преобразовать df1 в df2

df1 <- as.data.frame(v=c('xxx', 1, 10, 5), f=c(4, 3, 2, 7))
# df1 =
   v f
1  ? 4
2  1 7
3 10 2
4  5 7

Я хочу удалить первую строку, где v = 'xxx'. Затем отсортируйте кадр данных по значениям столбца v в порядке возрастания. Окончательный результат должен быть таким:

df2 <- data.frame(v=c(1, 5, 10), f=c(3, 7, 2))
# df2 =
   v f
1  1 3
2  5 7
3 10 2

Ответы [ 2 ]

2 голосов
/ 25 марта 2020

Мы можем удалить строку, в которой значение равно 'xxx', использовать type.convert для преобразования в соответствующий класс, а затем order данные.

df2 <- type.convert(subset(df1, v != 'xxx'))
df2[order(df2$v), ]

#   v f
#2  1 3
#4  5 7
#3 10 2

Используя dplyr, мы можем сделать то же самое, используя filter и arrange.

library(dplyr)
df1 %>% filter(v != 'xxx') %>% type.convert() %>% arrange(v)

данные

df1 <- data.frame(v=c('xxx', 1, 10, 5), f=c(4, 3, 2, 7))
1 голос
/ 25 марта 2020

Другое решение, которое работает путем вычитания из кадра данных, что строка which соответствует шаблону xxx:

df2 <- df1[-which(grepl("xxx", apply(df1, 1, paste0, collapse = " "))),]

В качестве альтернативы, простое подмножество также работает:

df2 <- df1[df1$v != "xxx",]

или:

df2 <- df1[!df1$v == "xxx",]

Тогда вам нужно только преобразовать данные в кадре данных в цифру c:

df2[] <- lapply(df2[], function(x) as.numeric(as.character(x)))

Теперь вы можете заказать:

df2 <- df2[order(df2$v),]
df2
   v f
2  1 3
4  5 7
3 10 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...