Проверьте, находится ли символ во фрейме данных

#r #dataframe #grepl

#r #фрейм данных #grepl

Вопрос:

Я ищу простой способ проверить, имеют ли значения во фрейме данных R запятую (или любой другой символ, если уж на то пошло).

Давайте предположим, что у меня есть следующий фрейм данных:

 df <- data.frame(A = c("apple","orange", "banana","strawberries"), 
                 B = c(23,12,10,15), 
                 C = c("2,53", "1.35","0,25","1,44"))
  

Если я знаю столбец с запятыми в нем, я использую это:

 which(grepl(",",df$C))
length(which(grepl(",",df$C)))
  

Тем не менее, я хочу вывод, подобный приведенному выше, но без указания столбца моего фрейма данных.

Есть предложения?

Ответ №1:

Вам нужно просто просмотреть все три столбца; sapply здесь работает:

 sapply(df, grep, pattern = ",")


##output:

# $A
# integer(0)
# 
# $B
# integer(0)
# 
# $C
# [1] 1 3 4
  

Чтобы получить length , вы можете сделать это:

 sapply(sapply(df, grep, pattern = ","), length)

# A B C D 
# 0 0 3 0 
  

Комментарии:

1. Вы можете применить length к выходным данным и получить ответ , который является 3 .

Ответ №2:

Решение несколько проще для понимания; сначала преобразуйте ваш фрейм данных в векторный.

 df2vector <- as.vector(t(df))

df2vector 
# [1] "apple"        "23"           "2,53"         "orange"       "12"          
# [6] "1.35"         "banana"       "10"           "0,25"         "strawberries"
# [11] "15"           "1,44"        
  

Затем используйте свой подход.

 length(which(grepl(",",df2vector)))
# [1] 3
  

Комментарии:

1. Отличное решение. Однострочник может быть (очевидно) length(which(grepl(",",as.vector(t(df))))) . Пожалуйста, избегайте включения > и в свой код, чтобы пользователи могли легко копировать / вставлять их и нажимать выполнить! Более того, рекомендуется добавлять # перед результатами, потому что они недоступны для запуска, и, опять же, мы хотим скопировать, вставить и запустить. Приветствия. 1