Как я могу удалить все записи фактора, если число входов без значений в столбце ниже порогового значения? - PullRequest
0 голосов
/ 04 января 2019

У меня есть набор данных, который выложен аналогично примеру ниже:

variable  value  flag
A         6.1 
A         7.0
A         3.3    x
A         5.2
A         9.5
B         1.1
B         1.0    x
B         1.0    x
B         3.4 
B         1.0    x
C         20
C         35
C         17
C         24
C         12

Что я хочу сделать, это удалить все записи фактора из столбца переменной, если количество записей БЕЗ «x» в столбце флага меньше 3.

Для данных выше, желаемый выход ниже. Все записи фактора B были удалены, поскольку в столбце флага было только две записи без «x».

variable  value  flag
A         6.1 
A         7.0
A         3.3    x
A         5.2
A         9.5
C         20
C         35
C         17
C         24
C         12

Порог (3 в приведенном выше примере) должен быть жестко задан.

У меня также есть немного кода, который удаляет все записи для факторов, которые имеют менее 6 записей, но не могли понять, как адаптировать его для того, что мне нужно.

df <- df %>%
  group_by(variable) %>%
  filter(n() > 5)

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Насколько я понимаю, только строки 6 и 10 могут быть удалены, поскольку они единственные, которые удовлетворяют критериям, не имеющим "х" во флаге и меньшим 3.

Когда приходит к вам исходный фрейм данных, вам не следует удалять строки 7 и 8, так как они не соответствуют критерию отсутствия "x".

# Find out which rows to be removed.
rows_to_remove <- which(df1$value < 3 & !df1$flag == "x")

# Split finding of rows into standalone objects.
row_first <- rows_to_remove[1]
row_second <- rows_to_remove[2]

# Delete rows, keep old dataframe [df1] as reference.
# Construct a new dataframe with deleted objects [df2].
df2 <- df1[-c(row_first, row_second), ]
0 голосов
/ 04 января 2019

Можно отфильтровать по значению sum(flag != 'x')

library(dplyr)

df %>% 
  group_by(variable) %>% 
  filter(sum(flag != 'x') >= 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...