#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