我有一个数据集,其中有15列col1到col15是数字。 我有100行数据,每行都附加了名称作为一个因素。 我想为所有15列的每一行做一个总结。

 head(df2phcl[,c(1:16)])
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15             NAME
78   95  101  100   84   93   93   85   81    97    80    94    81    79   87         R04-001 
100   61   96   75   98   92   99   99  102    83    84    NA   101    93    96         R04-002 
81   84   82   83   77   86   90   92   92    78    86    91    59    80    84         R04-003 
91   84   87   95  103   93   92   95   86    92   107    96    94    87    97         R04-004 
72   79   66   98   84   75   85   83   75    80    91    65    90    81    73         R04-005 
72   75   68   44   79   64   83   71   81    82    85    63    87    94    60         R04-006 

我的代码是。

library(dplyr)
####Rachis
SUMCL <- df2phcl %>%
  group_by(name) %>% 
summarise(CL = mean(c(col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,col12,col13,col14,col15), na.rm=T),
        CLMAX = max(c(col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,col12,col13,col14,col15), na.rm=T),
        CLMIN = min(c(col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,col12,col13,col14,col15), na.rm=T),
        CLSTD = sd(c(col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,col12,col13,col14,col15), na.rm=T),
        OUT = outliers(c(col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,col12,col13,col14,col15), na.rm=T))
head(SUMCL)
tail(SUMCL)

我的最终分析结果是...

Error: 
  Evaluation error: missing value where TRUE/FALSE needed.

我也尝试过...

df2phcl$col1+col2+col3+col4+col5+col6+col7+col8+col9+col10+col11+col12+col13+co114+col15[!df2phcl$col1+col2+col3+col4+col5+col6+col7+col8+col9+col10+col11+col12+col13+col14+col15%in%boxplot.stats(df2phcl$col1+col2+col3+col4+col5+col6+col7+col8+col9+col10+co111+col12+col13+col14+col15)$out]

This returns ....
   Error: object 'col2' not found

不知道我在做什么错,这适用于均值,最大,最小和sd。

> head(SUMCL)
# A tibble: 6 x 11
# Groups:   ENTRY, NAME, HEADCODE, RHTGENES, HEAD, PL [6]
  ENTRY             NAME HEADCODE RHTGENES   HEAD    PL    PH       CL CLMAX CLMIN     CLSTD
  <int>           <fctr>   <fctr>   <fctr> <fctr> <dbl> <dbl>    <dbl> <dbl> <dbl>     <dbl>
1     1         R04-001       CAW     Rht1   Club   319    83 88.53333   101    78  7.989875
2     2         R04-002       LBW Wildtype Common   330   102 91.35714   102    61 11.770936
3     3         R04-003       CBW     Rht2   Club   230    82 83.00000    92    59  8.220184
4     4         R04-004       LBW     Rht1 Common   328   117 93.26667   107    84  6.192930
5     5         R04-005       CBW     Rht1   Club   280    97 79.80000    98    65  9.182281
6     6         R04-006       LAW     Rht1 Common   310    92 73.86667    94    44 12.749603

我只想过滤3 sd或更高的离群值,然后使用dplyr打包以进行统计...

#1楼 票数:1

我不确定您要做什么,所以请告诉我下面的代码是否正确。

下面的方法是将数据从宽格式转换为长格式,这使得对每个级别的name进行汇总变得更加容易。

library(tidyverse)

# Fake data
set.seed(2)
dat = as.data.frame(replicate(15, rnorm(100)))
names(dat) = paste0("col", 1:15)
dat$name = paste0(rep(LETTERS[1:10], each=10), rep(letters[1:10], 10))

# Convert data to long format, remove outliers and summarize
dat %>% 
  gather(column, value, -name) %>%  # reshape from wide to long
  group_by(name) %>%                # summarize by name
  mutate(value = replace(value, abs(value - mean(value)) > 2*sd(value), NA)) %>%  # set outliers to NA
  summarise(mean = mean(value, na.rm=TRUE),
            max = max(value, na.rm=TRUE),
            sd = sd(value, na.rm=TRUE))
  name mean max sd 1 Aa 0.007848188 1.238744 0.8510016 2 Ab -0.208536464 1.980401 1.2764606 3 Ac -0.152986713 1.587845 0.8443106 4 Ad -0.413543054 0.965692 0.7225872 5 Ae -0.112648322 1.178716 0.7269527 6 Af 0.442268890 2.048040 1.0350119 7 Ag 0.390627994 1.978260 0.8716681 8 Ah 0.080505879 2.396349 1.3128403 9 Ai 0.257925059 1.984474 1.0196722 10 Aj 0.137469703 1.470177 0.7192616 # ... with 90 more rows 

#2楼 票数:0

我设法得到一些上校标准。 开发。 改变; 但是,我不确定它得出了多少观察结果。 我想从分布的顶部和底部取出均匀的数量。 像经过修剪的均值一样,它将删除20%的obs。 从分布的顶部和底部开始。 我很好奇的是,只剩下分布顶部和底部(+ -3 SD)的观测值。

> SUMCL <- df2phcl %>% 
+   gather(column, value, -c(ENTRY, NAME, HEADCODE, RHTGENES, HEAD,PL,PH)) %>%  # reshape from wide to long
+   group_by(ENTRY, NAME, HEADCODE, RHTGENES, HEAD,PL,PH) %>%                # summarize by name
+   mutate(value = replace(value, abs(value - mean(value)) > 2*sd(value), NA)) %>%  # set outliers to NA
+   summarise(CL = mean(value, na.rm=TRUE),
+             CLMAX = max(value, na.rm=TRUE),
+             CLMIN = min(value, na.rm=TRUE),
+             N = sum(!is.na(value), na.rm=TRUE),
+             CLSTD= sd(value, na.rm=TRUE),
+             CLSE = (CLSTD / sqrt(N)))
> head(SUMCL)
# A tibble: 6 x 13
# Groups:   ENTRY, NAME, HEADCODE, RHTGENES, HEAD, PL [6]
  ENTRY             NAME HEADCODE RHTGENES   HEAD    PL    PH       CL CLMAX CLMIN     N     CLSTD     CLSE
  <int>           <fctr>   <fctr>   <fctr> <fctr> <dbl> <dbl>    <dbl> <dbl> <dbl> <int>     <dbl>    <dbl>
1     1         R04-001       CAW     Rht1   Club   319    83 88.53333   101    78    15  7.989875 2.062977
2     2         R04-002       LBW Wildtype Common   330   102 91.35714   102    61    14 11.770936 3.145915
3     3         R04-003       CBW     Rht2   Club   230    82 84.71429    92    77    14  5.029583 1.344213
4     4         R04-004       LBW     Rht1 Common   328   117 92.28571   103    84    14  5.075258 1.356420
5     5         R04-005       CBW     Rht1   Club   280    97 79.80000    98    65    15  9.182281 2.370855
6     6         R04-006       LAW     Rht1 Common   310    92 76.00000    94    60    14 10.076629 2.693093

  ask by Jacob translate from so

未解决问题?本站智能推荐:

3回复

如果从数据框中的每个列中检测到异常值(例如99%分位数),则删除COMPLETE行

假设这是我的数据框。 我了解如何使用sapply或apply打印每列的分位数: 但是,如果检测到一个高于该阈值的值(对于EACH列而言),则删除整个ROW对我不起作用。 任何解决方案-带有或不dplyr都dplyr赞赏。
1回复

按列删除异常行并在R中因子

我正在使用 R 中的数据框。我有以下函数删除数据框df所有行,其中,对于指定的列索引/属性,该行的值超出(列)的平均值加上或减去 n*stdev(列)。 我的问题有两个部分。 (1) 我的数据框df也有一列“组”,它指定了一个类标签。 我希望能够根据列内的组内的均值和标准差删除异常值,即按因子(列
1回复

如何根据一列中所有其他数字的平均值重置一些离群值?

我需要将平均值大于2倍或小于列中所有其他数字的平均值的1/2的异常值替换为平均值。 例如,我有一个包含两列的数据集DT: 日期= {1-1-2019,1-2-2019,1-3-2019,1-4-2019,1-5-2019,1-6-2019} 价格= {2,3,2.5,2.7,28
1回复

如何计算15天内组的平均值、中值、最大值和最小值,而R中没有异常值影响

我有各种机器的数据,它们看起来像下面给出的图片中的那个输入示例数据输入样本我需要做的是根据每 15 天创建的组计算平均值、中值、最大值和最小值,例如:第 1 组 = 七月 1-15 日,第 2 组 = 七月 15-31 日等。但是在计算数据时,它应该不考虑异常值输出应该看起来像这个输出示例我首先使用
1回复

如何将组均值与单个观察值进行比较并创建新的TRUE/FALSE列?

我是 R 的新手,这是我在 SO 上的第一篇文章 - 所以请耐心等待。 我正在尝试识别数据集中的异常值。 我有两个 data.frames: (1 - 原始数据集,192 行):观察值及其值 (AvgConc) (2 - 使用 dplyr 创建,24 行):来自原始数据集的分组平均值,以及分位数
1回复

如何通过相应异常值的列表过滤数据框中的每一列数据

我有一个带有各自值的时间戳数据集(这些不是真实的,只是一个例子): 我有一个单独的表格,其中包含我使用“汇总”执行的一些统计数据,包括每个参数的异常值阈值(除“名称”和“时间”之外的所有列): 我想创建一个新表,显示名称、时间、参数和值,其中任何特定值都大于其异常值阈值。 我通过使用 pivot_l
1回复

Rboxplot使用apply()从boxplot()groupby保存离群值

Data reshape 或 apply() 函数来发现并保存 boxplot() 函数中的异常值,同时按组标识符对数据进行分组。 我的第一个尝试是创建一个函数,其中包含一个 boxplot() 函数来捕获异常值,例如。 boxplot(...)$out; 然后返回 $out(异常值)并将结果应
1回复

使用dplyr对R中的多层数据进行均值离群值替换

我的df有不同客户的销售数据,但有一些异常值,我想替换异常值(均值以下2 SD之上)(μ±2σ),并用每个customer_id均值替换它们。 有人可以帮我使用dplyr吗? 注意:所有“ 0”值和不以(μ±2σ)表示的销售额都需要替换为与customer_id有关的平均值