Разбор нескольких условий через сгруппированные переменные с помощью dplyr [duplicate]

Если вы ссылаетесь на рамки Cocoa или Foundation, вы можете использовать object-c в своем C-коде. Однако, если вы хотите использовать стандартный синтаксис обмена сообщениями, вам придется изменить расширение файла с .c на .m, чтобы оно было скомпилировано как объектное c. Если вы сохраните расширение .c, вы сможете использовать вызовы времени выполнения c-стиля для взаимодействия с объектами-объектами (например, objc_msgSend, objc_getClass и т. Д.).

Примеры: Внутри файла .m

void cFunction() {
    [[NSString alloc] init];
}

Внутри файла .c

void cFunction() {
    void* cls = objc_getClass("NSString");
    void* obj = objc_msgSend(cls, NSSelectorFromString(CFSTR("alloc")));
    obj = objc_msgSend(obj, NSSelectorFromString(CFSTR("init")));
}

Если вы выберете второй метод, обратитесь к Ссылка времени выполнения Objective-C .

3
задан Ronak Shah 18 January 2019 в 09:48
поделиться

3 ответа

Вы также можете сделать:

df %>%
 group_by(ID) %>%
 mutate(firstprice = Price[Index == min(Index)],
        lastprice = Price[Index == max(Index)])

  ID    Price Index firstprice lastprice
  <fct> <dbl> <dbl>      <dbl>     <dbl>
1 ABC     31.    3.        31.       81.
2 ABC     81.    6.        31.       81.
3 BCD    100.    2.       100.       84.
4 BCD     84.    9.       100.       84.
5 BCD     15.    5.       100.       84.
6 DEF     31.   12.        31.       42.
7 DEF     42.   18.        31.       42.

Или:

df %>%
 group_by(ID) %>%
 arrange(Index, .by_group = TRUE) %>%
 mutate(firstprice = Price[Index == first(Index)],
        lastprice = Price[Index == last(Index)])

  ID    Price Index firstprice lastprice
  <fct> <dbl> <dbl>      <dbl>     <dbl>
1 ABC     31.    3.        31.       81.
2 ABC     81.    6.        31.       81.
3 BCD    100.    2.       100.       84.
4 BCD     15.    5.       100.       84.
5 BCD     84.    9.       100.       84.
6 DEF     31.   12.        31.       42.
7 DEF     42.   18.        31.       42.
0
ответ дан tmfmnk 18 January 2019 в 09:48
поделиться

Мы можем group_by ID и использовать which.min и which.max, чтобы получить индекс, а затем получить соответствующий Price из него

library(dplyr)

df %>%
  group_by(ID) %>%
  mutate(firstPrice = Price[which.min(Index)], 
         lastPrice = Price[which.max(Index)])



#   ID    Price Index firstPrice lastPrice
#  <fct> <dbl> <dbl>      <dbl>     <dbl>
#1 ABC      31     3         31        81
#2 ABC      81     6         31        81
#3 BCD     100     2        100        84
#4 BCD      84     9        100        84
#5 BCD      15     5        100        84
#6 DEF      31    12         31        42
#7 DEF      42    18         31        42
0
ответ дан Ronak Shah 18 January 2019 в 09:48
поделиться

Опция с использованием data.table

library(data.table)
setDT(df)[, .(firstprice = Price[which.min(Index)], 
      lastprice = Price[which.max(Index)]), ID]
#     ID firstprice lastprice
#1: ABC         31        81
#2: BCD        100        84
#3: DEF         31        42

Или другой вариант с tidyverse

library(tidyverse)
df %>% 
  group_by(ID) %>%
  filter(Index %in% range(Index)) %>% 
  mutate(newCol = c("firstprice", "lastprice")) %>% 
  select(-Index) %>% 
  spread(newCol, Price)
# A tibble: 3 x 3
# Groups:   ID [3]
#  ID    firstprice lastprice
#  <fct>      <dbl>     <dbl>
#1 ABC           31        81
#2 BCD          100        84
#3 DEF           31        42
0
ответ дан akrun 18 January 2019 в 09:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: