找到包含总颗粒数 50% 的直径仓

问题描述 投票:0回答:1

我试图找到总颗粒 50% 处的直径。所以我能够使用此代码找到总颗粒 50% 处的直径大小。因此,第一列是直径尺寸,下一列是每个直径尺寸的颗粒数量。最后一列是总和,即直径尺寸减小时颗粒的总和。在此示例中,粒子总数等于 81394,50% 的粒子等于 40697。所以我想找到 40697 个粒子所在的直径仓。

    smps<-read_csv("C:/Users/missl/Desktop/smps.csv")
    transpose <- t(smps)
    transpose <- as.data.frame(transpose)
    rev_data_frame <- rev(transpose)
    rev_data_frame <- t(rev_data_frame)
    smps_1 <- as.data.frame(rev_data_frame)
    smps_1$sum <- cumsum(smps_1[, 2])
    smps_2 <- smps_1[which.min(abs((smps_1[51,3]/2)> smps_1$sum)),]

https://i.stack.imgur.com/PWwH5.png

2

我无法弄清楚如何将此代码扩展到其他列。目前,我只能弄清楚随着直径尺寸的减小,获得直径列和颗粒的总和。所以最终,我想找到占总颗粒数 50% 的每根柱子的直径。因此,对于 V1 列,其波长为 14.1 nm,V2 为 14.1 nm,V3 为 15.80 nm。

loopsmps<-read_csv("C:/Users/missl/Desktop/drydiameterupdated.csv")
loopsmps_1 <- as.data.frame(t(loopsmps))   
loopsmps_2 <- loopsmps_1 %>% 
  mutate(Sum = cumsum(loopsmps_1 ))
loopsmps3 <- loopsmps_2  %>% select(-1:-34630)
loopsmps4 <- as.list(loopsmps3,.GlobalEnv)
loopsmps5 <- as.data.frame(loopsmps4[["Sum"]])
loopsmps5$Diameter <- smps_1$Diameter
loopsmps6 <- loopsmps5 %>%
  select(Diameter, everything())

3

rstudio closest
1个回答
0
投票

在没有真正理解你的分析代码的情况下,我理解:

您有一系列观察结果,每个观察结果都是一个粒子。您已经按直径对观测值(=粒子)进行了排序。然后,您按直径大小对它们进行分组,并将输出聚合成每个直径的人类可读的计数摘要。

因此,现在数据集中的每一行都是观察值的聚合。对于人类来说,这很好,但对于 R 来说,这不是最舒服的数据格式。 R 希望一行等于一个观测值(=粒子)。我的意思是长格式,其中为每个颗粒明确打印直径,即使这意味着许多重复的直径。

此后,应该很容易应用

quantile()
功能。因为我认为当你说:“我想要
diameter
占粒子的 50%”时,我想你的意思是:“我想对所有直径进行排序,然后计数,直到达到粒子中间的直径”排序并访问值。”

请注意,计算

quantile
的方法有多种,请参阅
?quantile
。尝试不同的方法来感受它们之间的差异,并找出最适合您的需求的方法。

我将添加一些示例数据来演示我的意思。

© www.soinside.com 2019 - 2024. All rights reserved.