我想知道,在我下面的代码中,是否有tidyverse中的reshape2::dcast的类似功能或者甚至基数R来产生相同的下面的输出?

library(reshape2)
dat=structure(list(row = c("L2DA", "L2DA", "L2DA", "L2DA", "L2DA", 
                         "L2DA", "L2DF", "L2DF", "L2DF", "L2DF", "L2DF", "L2G", "L2G", 
                         "L2G", "L2M", "L2P", "L2P", "L2R", "L2R", "L2R", "L2R", "L2R", 
                         "L2R", "L2R", "L2V", "L2V", "L2V", "L2V", "L2DF", "L2G", "L2L", 
                         "L2M", "L2P", "L2V", "L2G", "L2L", "L2M", "L2P", "L2V", "L2L", 
                         "L2M", "L2P", "L2L", "L2L", "L2M", "L2DA", "L2DF", "L2G", "L2L", 
                         "L2M", "L2P", "L2V", "L2G", "L2L", "L2M", "L2P"), 
                 col = c("L2DF", 
                         "L2G", "L2L", "L2M", "L2P", "L2V", "L2G", "L2L", "L2M", "L2P", 
                         "L2V", "L2L", "L2M", "L2P", "L2L", "L2L", "L2M", "L2DA", "L2DF", 
                         "L2G", "L2L", "L2M", "L2P", "L2V", "L2G", "L2L", "L2M", "L2P", 
                         "L2DA", "L2DA", "L2DA", "L2DA", "L2DA", "L2DA", "L2DF", "L2DF", 
                         "L2DF", "L2DF", "L2DF", "L2G", "L2G", "L2G", "L2M", "L2P", "L2P", 
                         "L2R", "L2R", "L2R", "L2R", "L2R", "L2R", "L2R", "L2V", "L2V", 
                         "L2V", "L2V"),
                  R = c(0.64, 0.55, 0.42, 0.56, 0.57, 0.48, 0.37, 
                        0.24, 0.29, 0.48, 0.35, 0.48, 0.57, 0.29, 0.51, 0.33, 0.48, 0.58, 
                        0.46, 0.52, 0.56, 0.49, 0.47, 0.51, 0.53, 0.52, 0.53, 0.42, 0.64, 
                        0.55, 0.42, 0.56, 0.57, 0.48, 0.37, 0.24, 0.29, 0.48, 0.35, 0.48, 
                        0.57, 0.29, 0.51, 0.33, 0.48, 0.58, 0.46, 0.52, 0.56, 0.49, 0.47, 
                        0.51, 0.53, 0.52, 0.53, 0.42)), row.names = c(NA, -56L), class = "data.frame")


reshape2::dcast(dat, row ~ col, value.var = "R")  ## HERE

### OUTPUT:
   row L2DA L2DF  L2G  L2L  L2M  L2P  L2R  L2V
1 L2DA   NA 0.64 0.55 0.42 0.56 0.57 0.58 0.48
2 L2DF 0.64   NA 0.37 0.24 0.29 0.48 0.46 0.35
3  L2G 0.55 0.37   NA 0.48 0.57 0.29 0.52 0.53
4  L2L 0.42 0.24 0.48   NA 0.51 0.33 0.56 0.52
5  L2M 0.56 0.29 0.57 0.51   NA 0.48 0.49 0.53
6  L2P 0.57 0.48 0.29 0.33 0.48   NA 0.47 0.42
7  L2R 0.58 0.46 0.52 0.56 0.49 0.47   NA 0.51
8  L2V 0.48 0.35 0.53 0.52 0.53 0.42 0.51   NA

推荐答案

在基数R中,我们可以使用reshape()setdiff()order():

dat1 <- reshape(dat, idvar = "row", timevar = "col", direction = "wide")
dat1 <- dat1[, c("row", sort(setdiff(names(dat1), "row")))]
dat1[order(dat1$row), ]

   row R.L2DA R.L2DF R.L2G R.L2L R.L2M R.L2P R.L2R R.L2V
1  L2DA     NA   0.64  0.55  0.42  0.56  0.57  0.58  0.48
7  L2DF   0.64     NA  0.37  0.24  0.29  0.48  0.46  0.35
12  L2G   0.55   0.37    NA  0.48  0.57  0.29  0.52  0.53
31  L2L   0.42   0.24  0.48    NA  0.51  0.33  0.56  0.52
15  L2M   0.56   0.29  0.57  0.51    NA  0.48  0.49  0.53
16  L2P   0.57   0.48  0.29  0.33  0.48    NA  0.47  0.42
18  L2R   0.58   0.46  0.52  0.56  0.49  0.47    NA  0.51
25  L2V   0.48   0.35  0.53  0.52  0.53  0.42  0.51    NA

使用tidyverse:

library(dplyr)
library(tidyr)

dat %>%
  pivot_wider(names_from = col, values_from = R) %>%
  arrange(row) %>%
  select(row, sort(setdiff(names(.), "row")))

R相关问答推荐

如何将具有重复名称的收件箱合并到R中的另一列中,而结果不同?

pickerInput用于显示一条或多条geom_hline,这些线在图中具有不同 colored颜色

如何将移除事件分配给动态创建的按钮?

使用tidy—select创建一个新的带有mutate的摘要变量

如何在格子中添加双曲曲线

IMF IFS数据以R表示

多个过滤器内的一个盒子在仪表板Quarto

从所有项的 struct 相同的两级列表中,将该第二级中的所有同名项绑定在一起

比较理论阿尔法和经验阿尔法

如何在ggplot2中绘制具有特定 colored颜色 的连续色轮

R基于变量组合创建新的指标列

如何用不同长度的向量填充列表?

把代码写成dplyr中的group_by/摘要更简洁吗?

了解nchar在列表上的意外行为

R中从因数到数字的转换

如何计算多个变量的百分比与总和的百分比?

将y轴格式更改为R中的百分比

从字符串列中的向量中查找第一个匹配的单词

从多行中 Select 最小值

创建两个变量组合的索引矩阵