在数据框中,从其他列中选择最易变的列

用户42485

我有一个数据框,例如,从不同列中的实验中复制。如果我的数据框中的每一行都是一个样本,其中 a、b、c 列作为副本,我想:

  1. 确定重复之间的变异(每行中的最高值和最低值之间的差异是多少)?将其放在名为“变体”的新列中。)
  2. 如果变异大于 10,则省略最远的一个重复。

如何在此数据框中完成此操作?我想要新列:“max” - 每行的 a、b、c 的最高值 “min” - 每行的 a、b、c 的最低值 “variation” - 每行的 max/min

然后,我想省略 a、b 或 c 中距离其他点最远的数据点,以便其余点的变化小于 10。

df <- data.frame(a = rnorm(10, 100, 20),
                 b = rnorm(10, 2000, 500),
                 c = rnorm(10, 50, 20))
df$max = apply(df, 1, max, na.rm = T)
df$min = apply(df, 1, min, na.rm = T)
df$variation = df$max/df$min

(另外,如何使用 dplyr 和 %>% 符号计算最大值和最小值?)

保罗·鲁吉

使用 dplyr管道的示例,带有mutategroup_by我使用 tidyr gather以长格式重新调整数据,最后使用spread以宽格式重新调整数据

library(dplyr)
library(tidyr)
set.seed(100)
dtf_wide <- data.frame(a = rnorm(10, 100, 20),
                 b = rnorm(10, 2000, 500),
                 c = rnorm(10, 50, 20))

以长格式重塑数据。按 id 分组(宽格式的行号)然后计算变异和与中值的距离。

dtf <- dtf_wide %>% 
    # Explicitely add an identification column (for the grouping)
    mutate(id = row_number()) %>% 
    # put data in tidy format, one observation per row
    gather(key, value, a:c) %>% 
    arrange(id) %>% 
    group_by(id) %>%
    mutate(variation = max(value, na.rm = TRUE) / min(value, na.rm = TRUE),
           median = median(value),
           distancefrommedian = abs(value-median),
           maxdistancefrommedian = max(distancefrommedian)) 
head(dtf)

# # A tibble: 6 x 7
# # Groups:   id [2]
#      id   key      value variation    median distancefrommedian maxdistancefrommedian
#   <int> <chr>      <dbl>     <dbl>     <dbl>              <dbl>                 <dbl>
# 1     1     a   89.95615  49.58856  89.95615            0.00000              1954.987
# 2     1     b 2044.94307  49.58856  89.95615         1954.98692              1954.987
# 3     1     c   41.23820  49.58856  89.95615           48.71795              1954.987
# 4     2     a  102.63062  31.37407 102.63062            0.00000              1945.507
# 5     2     b 2048.13723  31.37407 102.63062         1945.50661              1945.507
# 6     2     c   65.28121  31.37407 102.63062           37.34941              1945.507

如果变异大于 10,则删除值远离中位数的行(如果需要,您可以在此处更改该规则以删除更多行)。

dtf <- dtf %>% 
    # For each id, 
    # Take all lines where variation is smaller than 10
    filter(variation <= 10 |
               # If varation is greater than 10,
               # Filter out lines were the value is further away from the median 
               (variation > 10 & distancefrommedian < maxdistancefrommedian)) %>% 
    # Keep only interesting variables
    select(id, key, value) %>% 
    # Compute the variations again (just to check)
    mutate(variation = max(value, na.rm = TRUE) / min(value, na.rm = TRUE)) 
head(dtf)
#      id   key     value variation
#   <int> <chr>     <dbl>     <dbl>
# 1     1     a  89.95615  2.181379
# 2     1     c  41.23820  2.181379
# 3     2     a 102.63062  1.572131
# 4     2     c  65.28121  1.572131
# 5     3     a  98.42166  1.781735
# 6     3     c  55.23923  1.781735

重塑数据以获得类似于原始数据框的宽格式表格。

dtf_wide2 <- dtf %>% 
    spread(key, value) 
head(dtf_wide2)
#      id variation         a        c
#   <int>     <dbl>     <dbl>    <dbl>
# 1     1  4.385692  89.95615 41.23820
# 2     2  4.385692 102.63062 65.28121
# 3     3  4.385692  98.42166 55.23923
# 4     4  4.385692 117.73570 65.46809
# 5     5  4.385692 102.33943 33.71242
# 6     6  4.385692 106.37260 41.23099

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据其他列中的答案选择在数据框中创建新列

如果默认列中的行是 NaN,如何从数据框中的其他列中选择行?

按列分组并从熊猫数据框中的其他列中选择特定值

使用其他数据框中的匹配值在数据框中创建新列

如何根据其他表中的其他关系从 1 列中选择 2 个数据

在数据框中选择性地添加列的值

在数据框列中选择非重复值

如何在数据框的数组列中选择元素?

在数据框列表中选择一列

在数据框中选择用于绘图的列-R Shiny

在数据框中选择与列值部分匹配的行

在数据框中选择数组作为列值

在数据框中创建一列,指示其他列中的值是否连续

在数据框中查找某些列重复的行,然后合并其他列中的元素

根据其他列中的值条件在数据框中跨列应用if语句

根据 R 中的其他列在数据框中创建新列

如何基于其他列中的数据从列中选择数据并进行转置?

根据其他列的唯一值从数据框中选择行?

根据其他列的输入在数据框中创建一列

在数据框R中动态创建列,并根据其他列条件进行填充

如何基于其他列的排列在数据框中创建新列?

如何根据其他列的条件在数据框中创建新列?

根据其他列值/ Pandas -Python 在数据框中创建 ID 列

在数据框中选择一组列以用于 R 中的 for 循环

R-在数据框中的列中选择特定字符并将其替换的功能

scala / spark-将数据框分组并从其他列中选择值作为数据框

Python:从其他列中选择的列中获取值

拆分列表,同时将其他列保留在数据框中

在数据框的新列中按键显示所有其他外观