首页 > 解决方案 > 设置循环以使用 r 中的函数

问题描述

我有一个包含三列的数据框,我想为媒体中的每个变量计算 95% 的公差上限。数据如下所示:因此,对于塑料和水,我需要分别计算每个变量的容差水平并将其写为第 4 列。我在用

nptol.int(data$result, alpha = 0.05, P = 0.95, side = 1, method=c("WILKS")) 

功能。

media   variable    result
plastic A   2.3
plastic B   4
plastic C   4.6
plastic D   3
plastic A   2
plastic B   5
plastic C   6.7
plastic A   8
plastic B   5
plastic C   4
water   A   2
water   B   4
water   C   5
water   A   8.2
water   B   4
water   C   5
plastic A   6
plastic B   7
plastic C   11.2

谢谢,

标签: rloops

解决方案


使用dplyr,您可以执行以下操作:

library(dplyr)
library(tolerance)
df %>% group_by(media, variable) %>% summarize(Upper = nptol.int(result, alpha = 0.05, P = 0.95, side = 1, method=c("WILKS"))$`1-sided.upper`)

# A tibble: 6 x 3
# Groups:   media [2]
  media   variable Upper
  <fct>   <fct>    <dbl>
1 plastic A         11.2
2 plastic B          8  
3 plastic C          7  
4 water   A          5  
5 water   B          8.2
6 water   C          4  

如果您想写为第 4 列并保留所有结果,您可以执行以下操作:

df %>% group_by(media, variable) %>% mutate(Upper = nptol.int(result, alpha = 0.05, P = 0.95, side = 1, method=c("WILKS"))$`1-sided.upper`)

# A tibble: 19 x 4
# Groups:   media, variable [6]
   media   variable result Upper
   <fct>   <fct>     <dbl> <dbl>
 1 plastic A           2.3  11.2
 2 plastic B           4     8  
 3 plastic C           4.6   7  
 4 plastic A           3    11.2
 5 plastic B           2     8  
 6 plastic C           5     7  
 7 plastic A           6.7  11.2
 8 plastic B           8     8  
 9 plastic C           5     7  
10 plastic A           4    11.2
11 water   B           2     8.2
12 water   C           4     4  
13 water   A           5     5  
14 water   B           8.2   8.2
15 water   C           4     4  
16 water   A           5     5  
17 plastic B           6     8  
18 plastic C           7     7  
19 plastic A          11.2  11.2

数据 您的数据只有一个 D 值,显然这是一个问题npol.int,所以我使用了这个数据:

df = data.frame(media = c(rep("plastic",10), rep("water",6), rep("plastic",3)),
                variable = c(LETTERS[1:3],rep(LETTERS[1:3],5),"A"),
                result = c(2.3,4,4.6,3,2,5,6.7,8,5,4,2,4,5,8.2,4,5,6,7,11.2))

推荐阅读