Объединить уникальные значения из нескольких столбцов в R - PullRequest
1 голос
/ 15 мая 2019

Мне нужно импортировать CSV, и в любом случае, когда строки содержат все одинаковые данные, за исключением только столбцов p и q, придется объединить эти строки и поставить подчеркивание между значениями в p и q.Проблема в том, что в группе около 40 столбцов.Я пытаюсь R, потому что размер файла может быть большим, и использование что-то вроде powershell занимает слишком много времени для группировки.Код, который я пробовал, работал с 5 строками и 1 дубликатом, кроме этих двух столбцов, но больший набор данных не дал желаемых результатов.

Например ... и я вынимаю много столбцовв приведенных ниже примерах и в моем примере кода, но, надеюсь, вы поймете:но это кажется грязным, и результаты, кажется, искажают формат выходного CSV.q и p заканчиваются в конце файла и будут содержать строки в строках данных, а не агрегированную информацию столбца.

 dat <- read.csv(file ="Sample.csv", header= TRUE)
 library(dplyr)
 result <- dat %>%
 group_by(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,r,x,w,y,z,aa,bb,cc,dd,ee) %>% 
 summarise(p = paste(p, collapse = "_"),q = paste(q, collapse = "_")) %>%
 ungroup()
 write.csv(result, "test.csv",row.names=FALSE)

FYI - это мой первый раз, используя R.

1 Ответ

1 голос
/ 15 мая 2019

Можно было бы удалить двойные кавычки, если столбец character, а затем сделать group_by paste

library(tidyverse)
nm1 <- c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", 
      "m", "n", "o", "r", "x", "w", "y", "z", "aa", "bb", "cc", "dd", 
       "ee")
dat %>% 
   mutate_if(is.character, str_remove, '"') %>%
   group_by_at(vars(nm1)) %>%
   summarise_at(vars(p, q), list(~ paste(unique(.), collapse="_")))
...