OK. Здесь немного вздремнуть.
Представьте себе следующий набор данных:
mydf <- data.frame(
x = c(.11, .11, .33, .33, .11, .11),
y = c(.22, .22, .44, .44, .22, .44),
z = c("a", "", "", "f", "b", ""))
mydf
# x y z
# 1 0.11 0.22 a
# 2 0.11 0.22
# 3 0.33 0.44
# 4 0.33 0.44 f
# 5 0.11 0.22 b
# 6 0.11 0.44
Из комбинации заголовке и описании (ни один из которых, кажется, полностью описать вашу проблему), я бы расшифровать, что вы хотите отказаться от строки 2 и 3, но не строка 6. Другими словами, вы хотите сначала проверить, дублируется ли строка (предположительно, только первые два столбца), а затем, если третий столбец пуст, отбросьте эту строку. По этим инструкциям строка 5 должна оставаться (колонка «z» не является пустой), а строка 6 должна оставаться (комбинация столбцов 1 и 2 не является дубликатом).
Если это так, вот один подход:
# Copy the data.frame, "sorting" by column "z"
mydf2 <- mydf[rev(order(mydf$z)), ]
# Subset according to your conditions
mydf2 <- mydf2[duplicated(mydf2[1:2]) & mydf2$z %in% "", ]
mydf2
# x y z
# 3 0.33 0.44
# 2 0.11 0.22
^^ Те данные, которые мы хотим удалить. Один из способов их удаления используется setdiff
на rownames
каждого набора данных:
mydf[setdiff(rownames(mydf), rownames(mydf2)), ]
# x y z
# 1 0.11 0.22 a
# 4 0.33 0.44 f
# 5 0.11 0.22 b
# 6 0.11 0.44
Можете ли вы опубликовать вывод 'dput (головка (yourdataframe))', чтобы сделать данные образцы легко копировать и вставлять. – A5C1D2H2I1M1N2O1R2T1
вывод выше, пожалуйста, помогите! – Dryad
возможно 'data [! data $ z == "",] ', но вы не опубликовали свои данные, как задал @AnandaMahto (вставка вывода из' dput (head (data))), поэтому мы не знаем. –