剪切R-Transspose数据帧

剪切R-Transspose数据帧,r,cut,R,Cut,使用iris数据集,我想生成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',]$

使用iris数据集,我想生成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)
如果我能加上其他物种的范围在下面,那就更好了


谢谢

我们可以做一个
堆栈
并将其从“tbl”输出重新调整为“宽”

library(data.table)
dcast(setDT(stack(as.list(tbl)))[, species := "setosa"], 
   species ~ rowid(species), value.var = c("ind","values"))
如果我们想让所有的“物种”

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我试图复制代码,但出现了下一个错误:subset2(x,I,exact=exact)中的错误:下标超出边界。>tbl>library(data.table)>dcast(setDT(stack(as.list(tbl))[,species:=“setosa”],+species~rowid(species),value.var=c(“ind”,“values”))堆栈中的错误。默认值(as.list(tbl)):至少需要一个矢量元素。它基于您的示例,对于通过这种方式解决的meI来说,它工作得很好。verCan您可以检查R版本和data.table版本吗。我有R3.5.0和数据。表1.11.2
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)