我有一个数据框,其中一部分如下所示:
Domain <- c(rep("Bacteria",3),rep("Archaea", 2))
Phylum <- c("Proteobacteria","Cyanobacteria","Planctomycetota", "Thermoplasmatota", "Thermoplasmatota")
Class <- c("Alphaproteobacteria","Cyanobacteriia","Phycisphaerae","Poseidoniia_A",NA)
Order <- c("Sphingomonadales", NA, "Phycisphaerales", "Poseidoniales", NA)
Family <- c("Emcibacteraceae", NA, NA, "Poseidonia", NA)
Genus <- c("UBA4441", NA,NA,NA,NA)
Species <- c("UBA4441 sp", NA,NA,NA,NA)
demo_table <- data.frame(Domain, Phylum, Class, Order, Family, Genus, Species)
Run Code Online (Sandbox Code Playgroud)
这里的要点是我想创建一个名为“赋值”的新列,该列包含逐行包含非 NA 值的最后两列的合并,并且这些值由空格分隔。
这是预期的输出:
| 领域 | 门 | 班级 | 命令 | 家庭 | 属 | 物种 | 分配 |
|---|---|---|---|---|---|---|---|
| 细菌 | 变形菌门 | α变形菌门 | 鞘氨醇单胞菌目 | 杆菌科 | UBA4441 | UBA4441 sp | UBA4441 UBA4441 sp |
| 细菌 | 蓝细菌 | 蓝细菌 | 不适用 | 不适用 | 不适用 | 不适用 | 蓝藻 蓝藻 |
| 细菌 | 浮霉菌门 | 球球族 … |
我有一个包含 3 列的数据框,如下所示:
set.seed(123)
demo_data <- data.frame(
query = rep(sprintf("ID%s", c(1:4)),4),
target = rep(sprintf("ID%s", c(1:4)), each = 4),
dist = round(runif(min = 40, max = 100, n = 16))
)
Run Code Online (Sandbox Code Playgroud)
我计划获取一个矩阵,其中query和target列中列出的值是新列,ANI 值是数据框中每个单元格的值,如下所示:
| 识别号1 | 识别号2 | ID3 | ID4 | |
|---|---|---|---|---|
| 识别号1 | 55 | 93 | 79 | 57 |
| 识别号2 | 43 | 82 | 83 | 49 |
| ID3 | 60 | 78 | 73 | 98 |
| ID4 | 97 | 100 | 76 | 94 |
PD:这些是合成值,在我的原始数据中,我希望每个单元格的对角线为 100(相同对相同)。