使用虹膜数据集我想生成4个范围并将它们放在列中。此外,我希望有4个额外的列,每个范围包含的数量。
我为您提供了迄今为止我所做的以获取相关信息的代码。
library(data.table)
setDT(iris)[ , bins := cut(Sepal.Length,4), by = list(Species)]
setDT(iris)[ , bins_n := table(bins), by = list(Species)]
table(iris[iris$Species=='setosa',]$bins)
(4.9,5.65] (5.65,6.4] (6.4,7.15] (7.15,7.9]
9 19 17 5
iris2<-data.frame(species="setosa",D1="(4.9,5.65]",D2="(5.65,6.4]",D3="(6.4,7.15]",D4="(7.15,7.9]",C1=9,C2=19,C3=17,C4=5)
因此,最终输出将是
species D1 D2 D3 D4 C1 C2 C3 C4
1 setosa (4.9,5.65] (5.65,6.4] (6.4,7.15] (7.15,7.9] 9 19 17 5
如果我可以添加其范围如下的其他物种,那就更好了。
谢谢!
答案 0 :(得分:1)
我们可以做一个stack
并将其重塑为广泛的&#39;来自&#39; tbl&#39;输出
library(data.table)
dcast(setDT(stack(as.list(tbl)))[, species := "setosa"],
species ~ rowid(species), value.var = c("ind","values"))
如果我们想要所有的物种&#39;
dcast(iris[, .(C =.N), .((D = bins),Species)],
Species ~ rowid(Species), value.var = c("D", "C"), sep="")
# Species D1 D2 D3 D4 C1 C2 C3 C4
#1: setosa (6.4,7.15] (5.65,6.4] (4.9,5.65] (7.15,7.9] 17 19 9 5
#2: versicolor (7.15,7.9] (6.4,7.15] (5.65,6.4] (4.9,5.65] 9 15 20 6
#3: virginica (5.65,6.4] (6.4,7.15] (7.15,7.9] (4.9,5.65] 22 15 11 2
tbl <- table(iris[iris$Species=='setosa',]$bins)