Как сравнить столбец данных в R - PullRequest
1 голос
/ 01 мая 2020

У меня есть фрейм данных со столбцом имен, датой прибытия (тип даты) и ценой (тип цифры c), как это

names    Datearriv   price
SUV      2019-01-16  84,35
HOR      2020-02-28  130,45
SUV      2019-01-16  235,12

На самом деле у меня проблема с моим проектом R. Я хотел бы сравнить имена, если они совпадают, я сравниваю дату прибытия, если она совпадает, я сравниваю цену пребывания, и программа должна удалить строку с самой высокой ценой пребывания, т.е. с налогом.

Я написал этот код, но он делает ошибки. Вот мой код и датафрейм

for(i in 1:96){nom=data[i,2] date = data[i,4] prix = data[i,8] z = i+1 for(j in z:97){ if(data[j,2] == nom){ if(data[j,4] == date){ if(data[j,8]>prix){ data = data[-j,] else{data = data[-i]}}}}}}

1 Ответ

1 голос
/ 01 мая 2020

Это одна возможность:

d <- read.table(text="
  names    Datearriv   price
  SUV      2019-01-16  84,35
  HOR      2020-02-28  130,45
  SUV      2019-01-16  235,12", header=TRUE
)


library(dplyr)

# Note that your variable is not numeric yet
d <- d %>%
     mutate( price = as.numeric(gsub(",", ".", price )))

# now can filter
d <- d %>% 
     group_by(names, Datearriv) %>% # define the groups
     add_count(name="N") %>% # check how many observations per group
     mutate( max = max(price) )  %>% # check the max price 
     filter(!(max==price & N>1) ) %>% # we can drop the observation if teh price is max and we have more than one
     dplyr::select(names:price) # select relevant columns

d
# A tibble: 2 x 3
# Groups:   names, Datearriv [2]
  names Datearriv  price
  <fct> <fct>      <dbl>
1 SUV   2019-01-16  84.4
2 HOR   2020-02-28 130. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...