Объединение значений строк в столбце - PullRequest
1 голос
/ 29 января 2020

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

  A      B      C      D
<char> <char> <char> <char>
  Aa     Bb     C      D 
  Aa     Bb     C      D

Я хочу получить это:

  A      B      C      D
<char> <char> <char> <char>
 AaAa   BbBb    C      D

Итак, если строка точно то же самое во всех строках, я хотел бы сохранить только это одно значение. Если они разные - объедините их в одну строку.

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Может быть, вы ищете это?

library(dplyr)

df <- tribble(
    ~A, ~B, ~C, ~D,
    "Aa", "Bb", "C", "D", 
    "Aa", "Bb", "C", "D",
)

df %>% # take the dataframe
    group_by_all() %>% # group it by all columns (i.e. unique combinations)
    slice(1) # and get the first row in each group

  A     B     C     D    
  <chr> <chr> <chr> <chr>
1 Aa    Bb    C     D  
0 голосов
/ 29 января 2020

Я не уверен, почему вы вообще хотите такое поведение, но вы можете добиться этого с помощью этого кода:

x=read.table(header = T, text="
A  B  C D
Aa Bb C D 
Aa Bb C D")
x %>% 
  group_by(C, D) %>% 
  summarise_at(c("A","B"), ~paste(.x, collapse=""))

По сути, вы группируете по своим «фиксированным» столбцам, и вы сворачиваетесь в A и B используя пасту.

Это чтобы получить ожидаемый результат. Если я ссылаюсь на ваш текст, он выглядит примерно так:

x=read.table(header = T, text="
A  B  C D
Aa Ba C D 
Aa Ba C D 
Aa Bb C D")
x %>% 
  group_by(C, D) %>% 
  summarise_at(c("A","B"), ~{
    if(length(levels(factor(.x)))==1) .x[1] else paste(unique(.x), collapse="")
  })

Если в столбце есть только одно значение, вы выводите это значение, в противном случае вы выводите объединение всех уникальных значений.

# A tibble: 1 x 4
# Groups:   C [1]
  C     D     A     B    
  <fct> <fct> <fct> <chr>
1 C     D     Aa    BaBb
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...