Как разделить совпадающие данные в один и несопоставимые данные в другой фрейм данных в R

#r #dataframe

#r #фрейм данных

Вопрос:

У меня есть следующие данные,

 R1 <- c("15515","5156",NA,NA, "2857")
RC <- c("ACC","ZXC","ACC","QWZ","ACC")
R2 <- c(515,5156.11-,415-,1455-,886)
df <- data.frame(R1,RC,R2, stringsAsFactors = F)
  

У меня есть условие, что R1 не должен содержать NA, а RC — это только ACC, который должен быть записан в df1
а оставшиеся данные — в другой фрейм данных df2.

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

Возможно ли создать такие два фрейма данных (df1 и df2) в одном экземпляре?

Ответ №1:

Вы можете объединить оба условия ( !is.na(df$R1) , df$RC == "ACC" ) с amp; и использовать результат один раз как подмножество df , а другой раз как отрицательный с ! .

 i <- !is.na(df$R1) amp; df$RC == "ACC"
df1 <- df[i,]
df2 <- df[!i,]
df1
#     R1  RC  R2
#1 15515 ACC 515
#5  2857 ACC 886
df2
#    R1  RC       R2
#2 5156 ZXC 5156.11-
#3 <NA> ACC     415-
#4 <NA> QWZ    1455-
  

В случае, если у вас есть NA в df$RC :

 i <- is.na(df$R1) | (is.na(df$RC) | df$RC != "ACC")
df1 <- df[!i,]
df2 <- df[i,]
  

Комментарии:

1. Но это также создает ненужные строки NA

2. Таким образом, df2 также не должен иметь NA ?

3. Поскольку мои фактические данные огромны, я получаю случайные строки NA в обоих фреймах данных

4. Первый код абсолютно хорош, но вместе с ожидаемыми данными я получаю дополнительные строки, которые содержат только NA

5. О, тогда у вас также есть NA в RC . Смотрите обновление для этого случая.