如何合并重复的行而不丢失R或VBA中的唯一数据?

时间:2019-04-25 17:12:56

标签: r excel vba

我在excel中有一个表,其中有唯一的列,但有很多重复的行。重复项由“ uniqueID”列衡量,该列是存储为字符串的电子邮件。行可以具有相同的uniqueID,但其他列中的数据丢失,或者同一列中的数据不同。

我希望能够合并和合并这些重复的行,例如,如果相同的uniqueID对字符串的响应相同,则将合并并连接在一起,以免数据丢失。所有数据都是字符串。

我已经在R和dplyr中尝试了Aggregate函数,但没有成功,主要是因为我仍然不确定这两个函数如何工作。

输入:

uniqueID, favFruits, favVeggie, State, favColor
john@mail.com, NULL, carrots, CA, Green
jill@mail.com, apples, NULL, FL, NULL
john@mail.com, grapes, beets, CA, Red
jill@mail.com, cherries, beans, FL, Blue
jill@mail.com, pineapple, beans, FL, Blue 
john@mail.com, grapes, beets, CA, Yellow

输出:

uniqueID, favFruits, favVeggie, State, favColor
john@mail.com, grapes, (carrots, beets), CA, (Green, Red, Yellow)
jill@mail.com, (apples, cherries, pineapple), beans, FL, Blue

注意:

在这种意义上,“ NULL”只是一个空白的excel单元格。它没有命名为NULL或其他任何东西。完整的数据集共有〜30列和〜20000行。每列中的“()”用来表示一个包含两个值的单元格,而不是在单元格内带有括号。

2 个答案:

答案 0 :(得分:1)

我将采用Dave2e的答案,并将其更进一步并删除所有NULL,如下所示:

library(tidyverse)

input <- tibble::tribble(
          ~uniqueID,  ~favFruits, ~favVeggie, ~State, ~favColor,
    "john@mail.com",      "NULL",  "carrots",   "CA",   "Green",
    "jill@mail.com",    "apples",     "NULL",   "FL",    "NULL",
    "john@mail.com",    "grapes",    "beets",   "CA",     "Red",
    "jill@mail.com",  "cherries",    "beans",   "FL",    "Blue",
    "jill@mail.com", "pineapple",    "beans",   "FL",    "Blue",
    "john@mail.com",    "grapes",    "beets",   "CA",  "Yellow"
    )


output <- input %>% 
    mutate_all(list(~str_replace(., "NULL", NA_character_))) %>% 
    group_by(uniqueID) %>% 
    summarise_all(list(~toString(unique(na.omit(.)))))

output

# A tibble: 2 x 5
  uniqueID      favFruits                   favVeggie      State favColor          
  <chr>         <chr>                       <chr>          <chr> <chr>             
1 jill@mail.com apples, cherries, pineapple beans          FL    Blue              
2 john@mail.com grapes                      carrots, beets CA    Green, Red, Yellow

答案 1 :(得分:0)

这是使用dplyr库的直接问题。关键是按uniqueID分组,然后使用Not Found The requested URL /main was not found on this server. 将唯一字符串连接在一起。

toString