dplyr / tidyr: распространение и получение уникальных значений другого столбца

Оператор == проверяет, указывают ли две ссылки на один и тот же объект или нет. .equals() проверьте фактическое содержимое строки (значение).

Обратите внимание, что метод .equals() принадлежит классу Object (суперкласс всех классов). Вам необходимо переопределить его в соответствии с вашим требованием к классу, но для String оно уже реализовано и проверяет, имеет ли две строки одно и то же значение.

  • Случай 1
    String s1 = "Stack Overflow";
    String s2 = "Stack Overflow";
    s1 == s2;      //true
    s1.equals(s2); //true
    
    Причина: строка литералы, созданные без нуля, хранятся в пуле строк в области перментонов кучи. Таким образом, оба s1 и s2 указывают на один и тот же объект в пуле.
  • Случай 2
    String s1 = new String("Stack Overflow");
    String s2 = new String("Stack Overflow");
    s1 == s2;      //false
    s1.equals(s2); //true
    
    Причина. Если вы создаете объект String с использованием ключевого слова new, ему выделяется отдельное пространство в куче.
0
задан twgardner2 9 March 2019 в 23:59
поделиться

2 ответа

Проверьте с помощью ldply из plyr после split

df=plyr::ldply(split(x$sequence,x$cluster), rbind)
col=df$.id
df$.id=NULL
df=data.frame(t(df))

names(df)=paste('cluster',col)
df
  cluster 1 cluster 2 cluster 3
1         A         D         D
2        AB         B        BA
3        AC        DB        BB
4       ABC        DC        BC
5      <NA>        AC        BF
6      <NA>       ADC      <NA>
.
0
ответ дан WeNYoBen 9 March 2019 в 23:59
поделиться

Вы можете использовать пару шагов tidyr / dplyr. Упорядочить данные пропорционально. Затем в каждом кластере добавьте номера строк, чтобы сохранить этот порядок и удовлетворить требования уникального идентификатора spread. Пропорция падения; распространяться; и отбросьте номера строк.

library(dplyr)
library(tidyr)

x %>%
  arrange(-proportion) %>%
  group_by(cluster) %>%
  mutate(row = row_number()) %>%
  select(-proportion) %>%
  spread(key = cluster, value = sequence, sep = "") %>%
  select(-row)
#> # A tibble: 6 x 3
#>   cluster1 cluster2 cluster3
#>   <chr>    <chr>    <chr>   
#> 1 A        D        D       
#> 2 AB       B        BA      
#> 3 AC       DB       BB      
#> 4 ABC      DC       BC      
#> 5 <NA>     AC       BF      
#> 6 <NA>     ADC      <NA>

Создано в 2019-03-09 пакетом Представить (v0.2.1)

0
ответ дан camille 9 March 2019 в 23:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: