Функция распространения R (ошибка в выбранных неопределенных столбцах)

Я гуглил свою ошибку, но это мне не помогло.

Получил фрейм данных со столбцом x.

unique(df$x) 

Результат:

[1] "fc_social_media"         "fc_banners"              "fc_nat_search"          
[4] "fc_direct"               "fc_paid_search"

Когда я пытаюсь это:

df <- spread(data = df, key = x, value = x, fill = "0") 

Я получил ошибку:

Error in `[.data.frame`(data, setdiff(names(data), c(key_var, value_var))) : 
undefined columns selected

Но это очень странно, потому что я использовал функцию распространения (в одном скрипте) в разное время.

Итак, я погуглил, увидел несколько «решений»:

  • Я удалил все «специальные» символы. Как видите, мои уникальные значения не содержат спецсимволов (почистил). Но это не помогло.
  • Я проверил, есть ли столбцы с таким же именем. Но все имена столбцов уникальны.

@Грегор, @Акрун:

    > str(df)
'data.frame':   100 obs. of  22 variables:
 $ visitor_id             : chr  "321012312666671237877-461170125342559040419" "321012366667112237877-461121705342559040419" "321012366661271237877-461170534255901240419" "321012366612671237877-461170534212559040419" ...
 $ visit_num              : chr  "1" "1" "1" "1" ...
 $ ref_domain             : chr  "l.facebook.com" "X.co.uk" "x.co.uk" "" ...
 $ x                      : chr  "fc_social_media" "fc_social_media" "fc_social_media" "fc_social_media" ...
 $ va_closer_channel      : chr  "Social Media" "Social Media" "Social Media" "Social Media" ...
 $ row                    : int  1 2 3 4 5 6 7 8 9 10 ...
 $                        : chr  "0" "0" "0" "0" ...
 $ Hard Drive             : chr  "0" "0" "0" "0" ...

person R overflow    schedule 16.01.2018    source источник
comment
Как насчет того, чтобы опубликовать dput(droplevels(head(df))), и мы попробуем посмотреть, что происходит с вашей структурой данных. ($ использует частичное совпадение, поэтому df$x отображение результата не обязательно означает, что у вас есть столбец с именем x).   -  person Gregor Thomas    schedule 16.01.2018
comment
@Акрун; key = x и value = x работали раньше   -  person R overflow    schedule 16.01.2018
comment
да, это может сработать, но, пожалуйста, опубликуйте образец своих данных, как предложил @Gregor. Есть ли дополнительные атрибуты в данных? Вы можете проверить str(df)   -  person akrun    schedule 16.01.2018
comment
Извините, вы правы. Я изменил данные, теперь вы можете найти x   -  person R overflow    schedule 16.01.2018
comment
Я нахожу столбец без имен, т.е. ""   -  person akrun    schedule 16.01.2018
comment
Проверьте выбранные df <- data.frame(x = c("fc_social_media", "fc_banners", "fc_nat_search", "fc_direct", "fc_paid_search"), x1 = 1:5);names(df)[2] <- ""; spread(df, x, x) #Error in [.data.frame(data, setdiff(names(data), c(key_var, value_var))) : неопределенные столбцы   -  person akrun    schedule 16.01.2018


Ответы (1)


Ошибка может быть связана с столбцом без имени, например "". Использование воспроизводимого примера

library(tidyr)
spread(df, x, x)

Ошибка в [.data.frame(данные, setdiff(имена(данные), c(key_var, value_var))): выбраны неопределенные столбцы

Мы могли бы заставить его работать, изменив имя столбца

names(df) <- make.names(names(df))
spread(df, x, x, fill = "0")
#   X fc_banners fc_direct fc_nat_search fc_paid_search fc_social_media
#1 1          0         0             0              0 fc_social_media
#2 2 fc_banners         0             0              0               0
#3 3          0         0 fc_nat_search              0               0
#4 4          0 fc_direct             0              0               0
#5 5          0         0             0 fc_paid_search               0

данные

df <- data.frame(x =  c("fc_social_media",  "fc_banners", 
   "fc_nat_search", "fc_direct", "fc_paid_search"), x1 = 1:5, stringsAsFactors = FALSE)
names(df)[2] <- ""
person akrun    schedule 16.01.2018