剪切R-Transspose数据帧
使用iris数据集,我想生成4个范围,并在列中处理它们。此外,我想有4列额外的数量包含在每个范围 我给你的是我到目前为止所做的获取信息的代码剪切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',]$
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)