重新排列两列,使相似的元素在一列中
Rearranging two columns so that like elements are in one column
我有一个看起来很简单的问题。我只是想不出如何搜索执行此操作的函数(或找到已经被问过的类似问题的方法:-/)。我目前有一个如下所示的数据框:
sp1 sp2 dist
Viola_canadensis_ott1089589 Dasiphora_fruticosa_ott782136 8.043604e-311
Viola_nuttallii_ott203476 Dasiphora_fruticosa_ott782136 6.702821e-311
Parnassia_fimbriata_ott1035577 Dasiphora_fruticosa_ott782136 4.691921e-311
Paxistima_myrsinites_ott381954 Dasiphora_fruticosa_ott782136 4.692195e-311
Dasiphora_fruticosa_ott782136 Sibbaldia_procumbens_ott176706 1.340783e-311
Dasiphora_fruticosa_ott782136 Fragaria_virginiana_ott1004791 2.680745e-311
Dasiphora_fruticosa_ott782136 Fragaria_vesca_ott852873 2.681018e-311
Dasiphora_fruticosa_ott782136 Geum_rossii_ott255461 2.681292e-311
这个框架只有 3 列,大约。 11000 行。请注意,我有 50 个物种想要 'move' 以与该物种和 ca 相同的方式部分添加到 sp1 列。 250 种移至 sp2 列;我已经把这 50 个物种放在一个向量中了。
我想做的是重新排列数据框,使其看起来像这样:
sp1 sp2 dist
Dasiphora_fruticosa_ott78213 Viola_canadensis_ott1089589 8.043604e-311
Dasiphora_fruticosa_ott78213 Viola_nuttallii_ott203476 6.702821e-311
Dasiphora_fruticosa_ott78213 Parnassia_fimbriata_ott1035577 4.691921e-311
Dasiphora_fruticosa_ott78213 Paxistima_myrsinites_ott381954 4.692195e-311
Dasiphora_fruticosa_ott782136 Sibbaldia_procumbens_ott176706 1.340783e-311
Dasiphora_fruticosa_ott782136 Fragaria_virginiana_ott1004791 2.680745e-311
Dasiphora_fruticosa_ott782136 Fragaria_vesca_ott852873 2.681018e-311
Dasiphora_fruticosa_ott782136 Geum_rossii_ott255461 2.681292e-311
我知道这对于 dplyr 来说一定很简单!!!!我以前没有遇到过这样的问题。
如果需要,这里有一个更长的例子:
key_species <- c("Dasiphora_fruticosa_ott782136", "Erythronium_grandiflorum_ott653293")
sp1 sp2 dist
Aquilegia_elegantula_ott668865 Erythronium_grandiflorum_ott653293 6.703914e-312
Aquilegia_coerulea_ott192307 Erythronium_grandiflorum_ott653293 6.703914e-312
Corydalis_caseana_ott3944909 Erythronium_grandiflorum_ott653293 6.703914e-312
Erythronium_grandiflorum_ott653293 Selaginella_densa_ott1095392 6.701177e-312
Erythronium_grandiflorum_ott653293 Selaginella_scopulorum_ott5923066 6.701177e-312
Erythronium_grandiflorum_ott653293 Blepharostoma_trichophyllum_ott390604 1.340235e-311
Viola_canadensis_ott1089589 Dasiphora_fruticosa_ott782136 8.043604e-311
Viola_nuttallii_ott203476 Dasiphora_fruticosa_ott782136 6.702821e-311
Parnassia_fimbriata_ott1035577 Dasiphora_fruticosa_ott782136 4.691921e-311
Paxistima_myrsinites_ott381954 Dasiphora_fruticosa_ott782136 4.692195e-311
Dasiphora_fruticosa_ott782136 Sibbaldia_procumbens_ott176706 1.340783e-311
Dasiphora_fruticosa_ott782136 Fragaria_virginiana_ott1004791 2.680745e-311
Dasiphora_fruticosa_ott782136 Fragaria_vesca_ott852873 2.681018e-311
Dasiphora_fruticosa_ott782136 Geum_rossii_ott255461 2.681292e-311
期望的结果:
sp1 sp2 dist
Erythronium_grandiflorum_ott653293 Aquilegia_elegantula_ott668865 6.703914e-312
Erythronium_grandiflorum_ott653293 Aquilegia_coerulea_ott192307 6.703914e-312
Erythronium_grandiflorum_ott653293 Corydalis_caseana_ott3944909 6.703914e-312
Erythronium_grandiflorum_ott653293 Selaginella_densa_ott1095392 6.701177e-312
Erythronium_grandiflorum_ott653293 Selaginella_scopulorum_ott5923066 6.701177e-312
Erythronium_grandiflorum_ott653293 Blepharostoma_trichophyllum_ott390604 1.340235e-311
Dasiphora_fruticosa_ott78213 Viola_canadensis_ott1089589 8.043604e-311
Dasiphora_fruticosa_ott78213 Viola_nuttallii_ott203476 6.702821e-311
Dasiphora_fruticosa_ott78213 Parnassia_fimbriata_ott1035577 4.691921e-311
Dasiphora_fruticosa_ott78213 Paxistima_myrsinites_ott381954 4.692195e-311
Dasiphora_fruticosa_ott782136 Sibbaldia_procumbens_ott176706 1.340783e-311
Dasiphora_fruticosa_ott782136 Fragaria_virginiana_ott1004791 2.680745e-311
Dasiphora_fruticosa_ott782136 Fragaria_vesca_ott852873 2.681018e-311
Dasiphora_fruticosa_ott782136 Geum_rossii_ott255461 2.681292e-311
抱歉,如果这是转贴,我真的想不出一个好的方法来制定搜索以查找类似问题。
我会尝试创建新的 sp
列,而不是修改现有的列。然后,当它们看起来不错时,您可以删除旧列并重命名新列。
data %>%
mutate(new_sp1 = case_when(
sp1 %in% key_species ~ sp1,
sp2 %in% key_species ~ sp2,
TRUE ~ NA_character_
),
new_sp2 = case_when(
sp1 %in% key_species ~ sp2,
sp2 %in% key_species ~ sp1,
TRUE ~ NA_character_
)
)
我有一个看起来很简单的问题。我只是想不出如何搜索执行此操作的函数(或找到已经被问过的类似问题的方法:-/)。我目前有一个如下所示的数据框:
sp1 sp2 dist
Viola_canadensis_ott1089589 Dasiphora_fruticosa_ott782136 8.043604e-311
Viola_nuttallii_ott203476 Dasiphora_fruticosa_ott782136 6.702821e-311
Parnassia_fimbriata_ott1035577 Dasiphora_fruticosa_ott782136 4.691921e-311
Paxistima_myrsinites_ott381954 Dasiphora_fruticosa_ott782136 4.692195e-311
Dasiphora_fruticosa_ott782136 Sibbaldia_procumbens_ott176706 1.340783e-311
Dasiphora_fruticosa_ott782136 Fragaria_virginiana_ott1004791 2.680745e-311
Dasiphora_fruticosa_ott782136 Fragaria_vesca_ott852873 2.681018e-311
Dasiphora_fruticosa_ott782136 Geum_rossii_ott255461 2.681292e-311
这个框架只有 3 列,大约。 11000 行。请注意,我有 50 个物种想要 'move' 以与该物种和 ca 相同的方式部分添加到 sp1 列。 250 种移至 sp2 列;我已经把这 50 个物种放在一个向量中了。
我想做的是重新排列数据框,使其看起来像这样:
sp1 sp2 dist
Dasiphora_fruticosa_ott78213 Viola_canadensis_ott1089589 8.043604e-311
Dasiphora_fruticosa_ott78213 Viola_nuttallii_ott203476 6.702821e-311
Dasiphora_fruticosa_ott78213 Parnassia_fimbriata_ott1035577 4.691921e-311
Dasiphora_fruticosa_ott78213 Paxistima_myrsinites_ott381954 4.692195e-311
Dasiphora_fruticosa_ott782136 Sibbaldia_procumbens_ott176706 1.340783e-311
Dasiphora_fruticosa_ott782136 Fragaria_virginiana_ott1004791 2.680745e-311
Dasiphora_fruticosa_ott782136 Fragaria_vesca_ott852873 2.681018e-311
Dasiphora_fruticosa_ott782136 Geum_rossii_ott255461 2.681292e-311
我知道这对于 dplyr 来说一定很简单!!!!我以前没有遇到过这样的问题。
如果需要,这里有一个更长的例子:
key_species <- c("Dasiphora_fruticosa_ott782136", "Erythronium_grandiflorum_ott653293")
sp1 sp2 dist
Aquilegia_elegantula_ott668865 Erythronium_grandiflorum_ott653293 6.703914e-312
Aquilegia_coerulea_ott192307 Erythronium_grandiflorum_ott653293 6.703914e-312
Corydalis_caseana_ott3944909 Erythronium_grandiflorum_ott653293 6.703914e-312
Erythronium_grandiflorum_ott653293 Selaginella_densa_ott1095392 6.701177e-312
Erythronium_grandiflorum_ott653293 Selaginella_scopulorum_ott5923066 6.701177e-312
Erythronium_grandiflorum_ott653293 Blepharostoma_trichophyllum_ott390604 1.340235e-311
Viola_canadensis_ott1089589 Dasiphora_fruticosa_ott782136 8.043604e-311
Viola_nuttallii_ott203476 Dasiphora_fruticosa_ott782136 6.702821e-311
Parnassia_fimbriata_ott1035577 Dasiphora_fruticosa_ott782136 4.691921e-311
Paxistima_myrsinites_ott381954 Dasiphora_fruticosa_ott782136 4.692195e-311
Dasiphora_fruticosa_ott782136 Sibbaldia_procumbens_ott176706 1.340783e-311
Dasiphora_fruticosa_ott782136 Fragaria_virginiana_ott1004791 2.680745e-311
Dasiphora_fruticosa_ott782136 Fragaria_vesca_ott852873 2.681018e-311
Dasiphora_fruticosa_ott782136 Geum_rossii_ott255461 2.681292e-311
期望的结果:
sp1 sp2 dist
Erythronium_grandiflorum_ott653293 Aquilegia_elegantula_ott668865 6.703914e-312
Erythronium_grandiflorum_ott653293 Aquilegia_coerulea_ott192307 6.703914e-312
Erythronium_grandiflorum_ott653293 Corydalis_caseana_ott3944909 6.703914e-312
Erythronium_grandiflorum_ott653293 Selaginella_densa_ott1095392 6.701177e-312
Erythronium_grandiflorum_ott653293 Selaginella_scopulorum_ott5923066 6.701177e-312
Erythronium_grandiflorum_ott653293 Blepharostoma_trichophyllum_ott390604 1.340235e-311
Dasiphora_fruticosa_ott78213 Viola_canadensis_ott1089589 8.043604e-311
Dasiphora_fruticosa_ott78213 Viola_nuttallii_ott203476 6.702821e-311
Dasiphora_fruticosa_ott78213 Parnassia_fimbriata_ott1035577 4.691921e-311
Dasiphora_fruticosa_ott78213 Paxistima_myrsinites_ott381954 4.692195e-311
Dasiphora_fruticosa_ott782136 Sibbaldia_procumbens_ott176706 1.340783e-311
Dasiphora_fruticosa_ott782136 Fragaria_virginiana_ott1004791 2.680745e-311
Dasiphora_fruticosa_ott782136 Fragaria_vesca_ott852873 2.681018e-311
Dasiphora_fruticosa_ott782136 Geum_rossii_ott255461 2.681292e-311
抱歉,如果这是转贴,我真的想不出一个好的方法来制定搜索以查找类似问题。
我会尝试创建新的 sp
列,而不是修改现有的列。然后,当它们看起来不错时,您可以删除旧列并重命名新列。
data %>%
mutate(new_sp1 = case_when(
sp1 %in% key_species ~ sp1,
sp2 %in% key_species ~ sp2,
TRUE ~ NA_character_
),
new_sp2 = case_when(
sp1 %in% key_species ~ sp2,
sp2 %in% key_species ~ sp1,
TRUE ~ NA_character_
)
)