Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算连续数字之间的差值,并用于输出到R中的另一个数据帧_R_Math_Loops_Dataset - Fatal编程技术网

计算连续数字之间的差值,并用于输出到R中的另一个数据帧

计算连续数字之间的差值,并用于输出到R中的另一个数据帧,r,math,loops,dataset,R,Math,Loops,Dataset,我有以下数据集 mark <- c("0", "A", "B", "C", "D", "E") phy <- c(0, 1, 10, 15, 18, 20) gen <- c(0, 3, 35.0, 55, 60, 65) mydata <- data.frame (mark, phy, gen) mark phy gen 1 0 0 0 2 A 1 3 3 B 10 35 4 C 15 55 5 D 18

我有以下数据集

mark <- c("0", "A", "B", "C", "D", "E")
phy <- c(0, 1, 10, 15, 18, 20)
gen <- c(0, 3, 35.0, 55, 60, 65)
mydata <- data.frame (mark, phy, gen)

  mark phy gen
1    0   0   0
2    A   1   3
3    B  10  35
4    C  15  55
5    D  18  60
6    E  20  65
第二种情况也是如此

(phy[3] - phy[2]) / (gen[3] - gen[2])
phydis <- phy[i+1] - phy[i], where i is 1:6 (end of the data frame)

ratio <- (phy[i+1] - phy[i]) / (gen[i+1] - gen[i])
等等

因此,产出将减少

(phy[3] - phy[2]) / (gen[3] - gen[2])
phydis <- phy[i+1] - phy[i], where i is 1:6 (end of the data frame)

ratio <- (phy[i+1] - phy[i]) / (gen[i+1] - gen[i])
与这里提供的数据集不同,我有一个很大的数据集要处理

编辑:

让我澄清一下第二部分:

根据第一部分,我们计算了区间之间的比率-

0 - 1,        1-10,      10-15,      15-18,    18-20 
0.3333333    0.2812500   0.2500000  0.6000000  0.4000000

现在,产品系数将取决于mydf2$phy值在这些时间间隔内的下降位置。例如,第一个值mydf2$phy=3(介于1-10之间)将乘以0.2812500,第二个值为11(介于10-15之间)将乘以0.2500000,依此类推

这可以解决您的第一个问题:

# diff gives the successive differences
ratio <- diff(phy)/diff(gen)
#diff给出了连续的差异

比率扩展Dason的答案:

mark <- c("0", "A", "B", "C", "D", "E")
phy <- c(0, 1, 10, 15, 18, 20)
gen <- c(0, 3, 35.0, 55, 60, 65)
mydata <- data.frame (mark, phy, gen)

ratio <- diff(mydata$phy)/diff(mydata$gen)

mark <- c("i", "k", "l", "m", "n", "o", "p")
phy <- c(3, 11, 12, 15, 17,18, 20)
mydf2 <- data.frame(mark, phy)

mydf2$cat.phy <- cut(mydf2$phy, mydata$phy)
key <- data.frame(cat=levels(cut(mydf2$phy, mydata$phy)), ratio=ratio)
mydf2$gen <- mydf2$phy * key[match(mydf2$cat.phy, key$cat), 'ratio']

mydf2
# diff gives the successive differences
ratio <- diff(phy)/diff(gen)
mark <- c("0", "A", "B", "C", "D", "E")
phy <- c(0, 1, 10, 15, 18, 20)
gen <- c(0, 3, 35.0, 55, 60, 65)
mydata <- data.frame (mark, phy, gen)

ratio <- diff(mydata$phy)/diff(mydata$gen)

mark <- c("i", "k", "l", "m", "n", "o", "p")
phy <- c(3, 11, 12, 15, 17,18, 20)
mydf2 <- data.frame(mark, phy)

mydf2$cat.phy <- cut(mydf2$phy, mydata$phy)
key <- data.frame(cat=levels(cut(mydf2$phy, mydata$phy)), ratio=ratio)
mydf2$gen <- mydf2$phy * key[match(mydf2$cat.phy, key$cat), 'ratio']

mydf2
> mydf2
  mark phy cat.phy      gen
1    i   3  (1,10]  0.84375
2    k  11 (10,15]  2.75000
3    l  12 (10,15]  3.00000
4    m  15 (10,15]  3.75000
5    n  17 (15,18] 10.20000
6    o  18 (15,18] 10.80000
7    p  20 (18,20]  8.00000