Почему R НЕ обнаружит повторяющийся символ?

Я пытаюсь удалить повторяющиеся данные идентификатора в моем фрейме данных

buying<-buy_nobuy[duplicated(buy_nobuy[,1])==F,]

после этого он говорит мне, что не осталось дублированных данных

length(buying[duplicated(buying[,1])==TRUE,1])

[1] 0 

но когда я проверял вручную в глобальной среде, я обнаружил, что на самом деле, все еще существуют дублирующиеся данные (например, на картинке)

Почему R НЕ обнаружит повторяющийся символ?

И я проверяю, что произойдет, если я проверю строки с одинаковым идентификатором:

> buying[9,1]==buying[71,1]
[1] FALSE

Кажется нелепым. Я предполагаю, что это может быть какая-то проблема с типом данных?
кто знает как это решить?

кстати, я читаю фрейм данных в виде символа, так как идентификатор не может быть прочитан как числовой или он будет представлен в экспоненциальном виде и потеряет реальный идентификатор

buy_nobuy <- read.csv('community_achievement_buying.csv',colClasses= c(Id = "character"))  

Я ОБНАРУЖИЛ, что, как вы сказали, в строке 71 есть дополнительное место.

> print(buying[9,1])
[1] 76561198321932950\t
73039 Levels: 76561197960272112\t ...
> print(buying[71,1])
[1] 76561198321932950\t\t
73039 Levels: 76561197960272112\t

Попробуйте: buy_nobuy<-buy_nobuy[!duplicated(buy_nobuy[,1]),]

akash87 30.05.2019 17:40

Если простая модификация, подобная приведенной выше, не работает, вам нужно будет предоставить фактические данные (возможно, только эти две строки), чтобы мы могли протестировать и проверить себя. Просто изображения данных вообще не будут полезны.

joran 30.05.2019 17:41

Часто эти проблемы возникают из-за начальных или конечных пробелов.

James 30.05.2019 17:45

Голосование за закрытие как невоспроизводимый пример. Чтобы запросить отмену закрытия, выведите сообщение dput( buying[c(9,71),1]) как редактировать.

IRTFM 30.05.2019 17:48

Сохраняйте согласованные имена фреймов данных. Вы дедуплицируете фрейм данных с именем buy_nobuy и находите дубликаты в другом фрейме данных с именем buying. Может быть, это совершенно разные фреймы данных? Может быть, вы создаете дубликат при создании buying?

Gregor Thomas 30.05.2019 18:02

@joran хорошо, StackOverflow, похоже, не предоставляет функцию вложения.

S.F. Yeh 31.05.2019 01:21

@42- Я не совсем понимаю смысл голосования за закрытие. ну, данные имеют 100 000 строк и считываются из csv, так что извините за отсутствие воспроизводимого примера. Но спасибо за ваш комментарий, так что я могу понять, что могу распечатать две строки и обнаружил, что в строке71 есть дополнительный / t, как они предложили DSGym и Джеймс. Поправлю пост, спасибо.

S.F. Yeh 31.05.2019 02:24

На самом деле это НЕ дополнительный пробел, а скорее «дополнительный» символ табуляции. ОДИН из этих элементов имеет одну вкладку, а другой - 2 вкладки. Итак, я полагаю, что теперь вы предоставили достаточно информации для полной диагностики лежащей в основе патологии, несмотря на вашу очевидную неспособность следовать четким указаниям. И это показывает, что предположение, предложенное в принятом ответе, было не совсем правильным.

IRTFM 31.05.2019 04:04

Не зря! Мы не хотим и не нуждаемся в огромных наборах данных, но создание небольшого воспроизводимого примера — важный первый шаг как для самостоятельного устранения проблемы, так и для обращения за помощью в Интернете. Но это требует некоторых усилий и исследований с вашей стороны. Поиск в Google «r воспроизводимый пример», скорее всего, приведет вас к вопросу SO с МНОЖЕСТВОМ советов о том, как это сделать.

joran 31.05.2019 05:44

@42- спасибо. Я думаю, что в литературе значение пробела и табуляции имеет совершенно одно и то же значение, поскольку все они могут рассматриваться как разделенный символ, и это действительно указывает на то, что может быть что-то другое, кроме того, что мы можем «видеть» в окне RStudio, поэтому я согласился это как подходящий ответ. Извините, что не знаю слишком много точной терминологии

S.F. Yeh 01.06.2019 06:51

@joran спасибо, попробую в следующий раз. поскольку эта проблема кажется решенной после того, как я распечатаю две строки. Я новичок в R, кодах или терминологии, спасибо за предложения.

S.F. Yeh 01.06.2019 06:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
11
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
data <- data.frame(
  id = c("123456789", "123456789 "),
  buy = c(1,1)
)

Как уже упоминалось, векторы символов часто имеют пробелы в конце => Вы не увидите этого в средстве просмотра данных R Studio. Есть простой способ определить, действительно ли эти значения совпадают: попробуйте charToRaw, чтобы увидеть, совпадают ли оба идентификатора.

apply(data[1], 1, charToRaw)
[[1]]
[1] 31 32 33 34 35 36 37 38 39

[[2]]
 [1] 31 32 33 34 35 36 37 38 39 20



data$id <- trimws(data$id) # Thanks @ Mako212

apply(data[1], 1, charToRaw)

      [,1] [,2]
 [1,]   31   31
 [2,]   32   32
 [3,]   33   33
 [4,]   34   34
 [5,]   35   35
 [6,]   36   36
 [7,]   37   37
 [8,]   38   38
 [9,]   39   39

В базе R есть trimws(), не уверен, что здесь есть необходимость в stringr

Mako212 30.05.2019 18:11

не знал о такой функции, если честно, спасибо :-)

DSGym 30.05.2019 18:13

Другие вопросы по теме