R Ошибка «нижний предел» в операторе if - объяснение и исправление кода? - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть фрейм данных (Dataset_Events) с семью столбцами, два из которых - eventInfo_ea и eventInfo_el.Я хотел бы удалить значение ячейки eventInfo_el в строках, где eventInfo_ea = 'добавить в корзину'.См. Приведенный ниже код.

 Remove = function(Dataset_Events, eventInfo_ea, eventInfo_el){
  if(Dataset_Events[["eventInfo_ea"]]=="add to cart"){
    Dataset_Events[["eventInfo_el"]] <- NULL
  }
 }
 sapply(Dataset_Events, Remove)

К сожалению, R выдает мне следующее сообщение об ошибке: «Ошибка в Dataset_Events [[« eventInfo_ea »]]]: нижний индекс выходит за границы» Размер кадра данных равен 713478 x 7. Можеткто-нибудь объяснит почему и как это исправить?

Если я просто запускаю условие if, я получаю правильный ответ ИСТИНА / ЛОЖЬ той же длины, что и data.frame

Dataset_Events[["eventInfo_ea"]]=="add to cart"

Вот пример набора данных из двух соответствующих столбцов(оба столбца имеют фактор класса):

eventInfo_ea                                           eventInfo_el
1                click                                              thumbnail
2                click                                            description
3                click                                             hero image
4                click                                     open size dropdown
5                click                                             hero image
6                click                                             hero image
7                click                                             hero image
8                click                                            description
9                click                                     open size dropdown
10               click                                             hero image
11               click                                             hero image
12               click                                             hero image
13               click                                             hero image
14               click                                            description
15               click                                           open reviews
16               click                                             hero image
17               click                                           open reviews
18               click                                            description
19     add to wishlist                                             hero image
20               click                                             hero image
21               click                                             hero image
22         add to cart                                             hero image

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Я считаю, что проблема в том, что Dataset_Events[["eventInfo_el"]] возвращает фактор.В этом случае лучше использовать идентичный .

Remove = function(Dataset_Events, eventInfo_ea, eventInfo_el){
    if(identical(as.character(Dataset_Events[["eventInfo_ea"]]),"add to cart")){
        Dataset_Events[["eventInfo_el"]] <- NULL
    }
}
sapply(Dataset_Events, Remove)
0 голосов
/ 13 ноября 2018

Я действительно нашел решение, которое работает.Я пропустил всю часть определения функции и просто использовал следующий код, и он работал

Dataset_Events[ Dataset_Events["eventInfo_ea"]=="add to cart", ]["eventInfo_el"] <- NA

Тем не менее, я был рад услышать, почему предложения от всех вас, похоже, совсем не изменили мой набор данных.Большое спасибо, хотя !!!

0 голосов
/ 13 ноября 2018

Попробуйте это:

Remove = function(Dataset_Events){
    ind = Dataset_Events[["eventInfo_ea"]] == "add to cart"
    Dataset_Events[["eventInfo_el"]][ind] = NA
    return (Dataset_Events)
    }
Remove(Dataset_Events)

Я удалил второй и третий аргументы из вашей функции (кажется, вы их не используете?). Как вы заметили, Dataset_Events[["eventInfo_ea"]]=="add to cart" дает вам вектор логики, поэтому его следует использовать для индексации строк, которые вы хотите установить в NA (я изменил значение NULL, поскольку это вызывало проблемы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...