Оператор ==
проверяет, указывают ли две ссылки на один и тот же объект или нет. .equals()
проверьте фактическое содержимое строки (значение).
Обратите внимание, что метод .equals()
принадлежит классу Object
(суперкласс всех классов). Вам необходимо переопределить его в соответствии с вашим требованием к классу, но для String оно уже реализовано и проверяет, имеет ли две строки одно и то же значение.
String s1 = "Stack Overflow";
String s2 = "Stack Overflow";
s1 == s2; //true
s1.equals(s2); //true
Причина: строка литералы, созданные без нуля, хранятся в пуле строк в области перментонов кучи. Таким образом, оба s1 и s2 указывают на один и тот же объект в пуле. String s1 = new String("Stack Overflow");
String s2 = new String("Stack Overflow");
s1 == s2; //false
s1.equals(s2); //true
Причина. Если вы создаете объект String с использованием ключевого слова new
, ему выделяется отдельное пространство в куче. Проверьте с помощью 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>
. Вы можете использовать пару шагов 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) sup>