Найдите запятую в датафрейме и верните строку (в r) - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу найти запятую в кадре данных и вернуть строки, в которых она была найдена.данные такие: r

Ответы [ 5 ]

0 голосов
/ 19 февраля 2019

Вот один вариант с base R

df[Reduce(`|`, lapply(df, grepl, pattern = ",")),]

данными

df <- structure(list(X1 = structure(1:3, .Label = c("1,2,3", "2,3", 
"4"), class = "factor"), X2 = structure(1:3, .Label = c("a", 
 "b", "c"), class = "factor"), X3 = structure(c(1L, 3L, 2L), .Label = c("2,3,4", 
 "4", "a"), class = "factor")), class = "data.frame", row.names = c(NA, 
  -3L))
0 голосов
/ 19 февраля 2019

Вставив все столбцы вместе, вы можете найти строки, содержащие запятую:

Пример с фиктивным набором данных:

df<-data.frame(Var=c("a,a","a","a","a,a","a"), Var2 = c("b","b,b","b","b","b"))
df2<-apply(df,1,paste,collapse="")
which(grepl(",",df2))
0 голосов
/ 19 февраля 2019

Мы можем использовать filter_all из dplyr:

library(dplyr)

df %>%
  filter_all(any_vars(grepl(',', .)))

Выход:

     X1 X2    X3
1 1,2,3  a 2,3,4
2   2,3  b     a
3     4  c     4

Данные:

df <- data.frame(X1 = c("1,2,3", "2,3", "4"),
                 X2 = letters[1:3],
                 X3 = c("2,3,4", "a", "4"))
0 голосов
/ 19 февраля 2019

Предположим, что ваш фрейм данных хранится в переменной df.Вы можете найти строки с запятой, используя пакет stringr и функцию apply:

df=cbind(1:4,c("oko","kokk","rk,ki","plok"),c("er,t","plo","oli","rte"))
library(stringr)
inds_row=which(apply(df,1,function(x){ifelse(sum(str_detect(x,','))>0,T,F)})==T)
inds_row
> [1] 1 3

С уважением,

Smich

0 голосов
/ 19 февраля 2019

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

data <- data %>%
     mutate(flag = ifelse(str_detect(columnC, ",")|str_detect(columnD, ",")|str_detect(columnE, ","), 1, 0) %>%
     filter(flag==1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...