计算多个模拟数据框中多列值范围的百分比
Calculate percentages of range of values within multiple columns in multiple simulated dataframes
我有五个数据框,每个数据框有 8 列和 10000 行。每个数据帧的数据是从具有不同 mean
和 sd
规格的随机 t 分布中提取的。每列对应于这些规格之一。同时,每个个案都是从特定 t 分布中提取的一个 t 值。我是手工完成的,没有自动过程。 (关于如何更轻松地执行此操作的任何建议?)
对于数据框中的每一列,我想计算位于特定范围 >0,=<0.6 之间的观察值的百分比; >0.6,=<0.7; >0.7,=<0.8 等等,直到 >1.4。
我尝试了 for 循环,但我仍然很难理解它是如何工作的,所以我也失败了。
isim20$ival_05 <- cut(isim20[,1], c(0,0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, max(isim20[,1])))
isim20$ival_08 <- cut(isim20[,2], c(0,0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, max(isim20[,2])))
...
,其中
isim20
是我的数据框
ival_05
和 ival_08
是两个变量(列),我想为其计算 cut
命令中范围给出的百分比。
我在这一点上卡住了,因为我不明白如何一次计算每列的每个值范围的百分比(以避免手动计算)。除此之外,我还必须为所有五个数据帧重复所有内容。
感谢您的所有建议!
我相信这会有所帮助(最终 Freq
var 会保存您需要的百分比)。我创建了虚拟数据,不需要任何包:
#Dummy data
set.seed(123)
DF <- data.frame(v1=runif(10000,0,2),
v2=runif(10000,0,2),
v3=runif(10000,0,2),
v4=runif(10000,0,2),
v5=runif(10000,0,2),
v6=runif(10000,0,2),
v7=runif(10000,0,2),
v8=runif(10000,0,2))
#Create function
compute_breaks <- function(x)
{
y <- cut(x, breaks=c(0,0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, max(x)),include.lowest = T,right = T,
dig.lab = 10)
z <- as.data.frame(prop.table(table(y)))
return(z)
}
#Apply and obtain a list
List <- apply(DF,2,compute_breaks)
#Bind all
DF2 <- do.call(rbind,List)
#Format to obtain variable
DF2$var <- gsub("\..*",'',rownames(DF2))
rownames(DF2) <- NULL
你会得到这样的东西(我只包括 head()
和 tail()
):
y Freq var
1 [0,0.6] 0.3012 v1
2 (0.6,0.7] 0.0485 v1
3 (0.7,0.8] 0.0477 v1
4 (0.8,0.9] 0.0567 v1
5 (0.9,1] 0.0516 v1
6 (1,1.1] 0.0481 v1
----------------------
y Freq var
75 (0.9,1] 0.0476 v8
76 (1,1.1] 0.0549 v8
77 (1.1,1.2] 0.0480 v8
78 (1.2,1.3] 0.0476 v8
79 (1.3,1.4] 0.0478 v8
80 (1.4,1.999860199] 0.2999 v8
我有五个数据框,每个数据框有 8 列和 10000 行。每个数据帧的数据是从具有不同 mean
和 sd
规格的随机 t 分布中提取的。每列对应于这些规格之一。同时,每个个案都是从特定 t 分布中提取的一个 t 值。我是手工完成的,没有自动过程。 (关于如何更轻松地执行此操作的任何建议?)
对于数据框中的每一列,我想计算位于特定范围 >0,=<0.6 之间的观察值的百分比; >0.6,=<0.7; >0.7,=<0.8 等等,直到 >1.4。
我尝试了 for 循环,但我仍然很难理解它是如何工作的,所以我也失败了。
isim20$ival_05 <- cut(isim20[,1], c(0,0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, max(isim20[,1])))
isim20$ival_08 <- cut(isim20[,2], c(0,0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, max(isim20[,2])))
...
,其中
isim20
是我的数据框
ival_05
和 ival_08
是两个变量(列),我想为其计算 cut
命令中范围给出的百分比。
我在这一点上卡住了,因为我不明白如何一次计算每列的每个值范围的百分比(以避免手动计算)。除此之外,我还必须为所有五个数据帧重复所有内容。
感谢您的所有建议!
我相信这会有所帮助(最终 Freq
var 会保存您需要的百分比)。我创建了虚拟数据,不需要任何包:
#Dummy data
set.seed(123)
DF <- data.frame(v1=runif(10000,0,2),
v2=runif(10000,0,2),
v3=runif(10000,0,2),
v4=runif(10000,0,2),
v5=runif(10000,0,2),
v6=runif(10000,0,2),
v7=runif(10000,0,2),
v8=runif(10000,0,2))
#Create function
compute_breaks <- function(x)
{
y <- cut(x, breaks=c(0,0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, max(x)),include.lowest = T,right = T,
dig.lab = 10)
z <- as.data.frame(prop.table(table(y)))
return(z)
}
#Apply and obtain a list
List <- apply(DF,2,compute_breaks)
#Bind all
DF2 <- do.call(rbind,List)
#Format to obtain variable
DF2$var <- gsub("\..*",'',rownames(DF2))
rownames(DF2) <- NULL
你会得到这样的东西(我只包括 head()
和 tail()
):
y Freq var
1 [0,0.6] 0.3012 v1
2 (0.6,0.7] 0.0485 v1
3 (0.7,0.8] 0.0477 v1
4 (0.8,0.9] 0.0567 v1
5 (0.9,1] 0.0516 v1
6 (1,1.1] 0.0481 v1
----------------------
y Freq var
75 (0.9,1] 0.0476 v8
76 (1,1.1] 0.0549 v8
77 (1.1,1.2] 0.0480 v8
78 (1.2,1.3] 0.0476 v8
79 (1.3,1.4] 0.0478 v8
80 (1.4,1.999860199] 0.2999 v8