Узнайте, сколько раз аргумент является истинным или ложным несколько условий R

#r

#r

Вопрос:

Я хотел бы узнать, во сколько раз «Значение» выше для «Округа» (например, округа 1), когда «Округ» имеет значение FALSE. Вот мои данные. «Округ» всегда является дубликатом, поскольку он имеет как TRUE, так и FALSE .

 data <- data.frame( "County" = c(1,1,2,2,3,3,4,4,5,5), "Value" = c(10,20,7,15,40,32,43,13,12,16), "ID" = c("FALSE", "TRUE","FALSE","TRUE","FALSE", "TRUE","FALSE", "TRUE","FALSE","TRUE"))
 

Я пытался добавить новый столбец, но я думаю, что это неправильный способ сделать это. Я просто хочу знать, сколько раз округ 1 (когда он имеет значение False) имеет более высокое значение, чем округ 1 (когда он имеет значение TRUE).

Предыстория всего этого заключается в том, что я хотел бы знать, даст ли это мне более высокую дисперсию (в данном случае более высокое значение), чем когда округ имеет значение true.

Есть мысли?

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

1. Я не понимаю, чего вы хотите. Не могли бы вы уточнить свое последнее предложение whether the value is higher than TRUE for each "County" и, возможно, добавить желаемый результат.

2. Пожалуйста, уточните свой вопрос. Я не понимаю, какова ваша цель.

3. Теперь я обновил свой пост! Спасибо за информацию!

Ответ №1:

Возможно, эта data.table опция может помочь

 > setDT(data)[, .SD[Value[ID == "FALSE"] == max(Value)], County]
   County Value    ID
1:      3    40 FALSE
2:      3    32  TRUE
3:      4    43 FALSE
4:      4    13  TRUE
 

или

 > setDT(data)[, NewCol :=  (Value[ID == "FALSE"] == max(Value)), County][]
    County Value    ID NewCol
 1:      1    10 FALSE      0
 2:      1    20  TRUE      0
 3:      2     7 FALSE      0
 4:      2    15  TRUE      0
 5:      3    40 FALSE      1
 6:      3    32  TRUE      1
 7:      4    43 FALSE      1
 8:      4    13  TRUE      1
 9:      5    12 FALSE      0
10:      5    16  TRUE      0
 

Ответ №2:

Используя dplyr

 library(dplyr)
data %>%
  group_by(County) %>% 
  filter(Value[!as.logical(ID)] == max(Value))
 

Ответ №3:

Возможно, так:

 data %>% arrange( ID ) %>% group_by(County) %>% summarize( FalseHigher = diff(Value) <= 0 )
 

Вы можете изменить имя с FalseHigher на Difference, если хотите.

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

1. Обратите внимание, что в другом месте вам нужно будет гарантировать, что для каждого округа есть только две строки, и присутствуют как TRUE, так и FALSE.

2. Отлично!! Это было именно то, что я искал! Большое спасибо!