【发布时间】:2020-04-25 08:49:20
【问题描述】:
我正在尝试从长格式转换为宽格式,但多列表示唯一行。
在下面的示例中,block, density, species 列表示唯一的个人。每个人都有 2 或 3 行与面积和大小相关联。我想将区域和大小转换为宽格式。
这是我的数据集
block <- c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2)
species <- c("A","A","A","A","B","B","B","B","A","A","A","A","B","B","B","B","B")
den <- c("20","20","50","50","20","20","50","50","20","20","50","50","20","20","50","50","50")
block <- as.factor(block)
den <- as.factor(den)
species <- as.factor(species)
area <- c(1:17)
size <- c(17:33)
df <- data.frame(block, species, den, area, size)
我想最终数据集只有独特的个体
block species den area.1 area.2 area.3 size.1 size.2 size.3
1 A 20 1 2 NA 17 18 NA
1 A 50 3 4 NA 19 20 NA
.....
2 B 50 15 16 17 31 32 33
注意:我说服的其他答案不使用多列来表示行的唯一性
【问题讨论】:
-
使用
data.table:library(data.table); setDT(df); dcast(df, block + species + den ~ rowid(block, species, den), value.var = c("area", "size"))
标签: r casting type-conversion reshape2