【问题标题】:R: function to detect time-invariant variablesR:检测时不变变量的函数
【发布时间】:2021-06-07 09:09:35
【问题描述】:

假设我们有以下数据集:

Lines <- "id time sex Age
1  1       male   90
1  2       male   91
1  3       male   92
2  1       female  87
2  2       female  88
2  3       female  89
3  1       male  50
3  2       male  51
3  3       male  52
4  1       female  54
4  2       female  55
4  3       female  56"

dat <- read.table(text = Lines, header = TRUE)

我想创建一个函数来扫描数据集中除 id 和 time 之外的所有列,并检索一个字符串,其中提到哪些变量不是时不变的(每个时间段都变化)。在此示例中,它将是 Age

【问题讨论】:

  • 大概是在id里面吧?那么一个在 id 内演化的变量呢,比如 1, 2, 1?即,其中不同值的数量不等于时间段的数量?您希望如何处理缺失值:它们是“计数”还是应该被忽略?
  • 这是否等同于计算按时间分组的方差(或 sd)?然后 'aggregate()' 和 'FUN=sd' 和 'by=list(dat$time)' 应该可以解决问题:只需查看 sd 为零的位置。

标签: r dataframe function group-by


【解决方案1】:

dplyr 这里有一个选项 -

library(dplyr)

dat %>%
  group_by(id) %>%
  summarise(across(-time, ~all(. != lag(.), na.rm = TRUE))) %>%
  select(where(~is.logical(.) && all(.))) %>%
  names

#[1] "Age"

在每个id 内,除了time 列,如果当前值与所有值的前一个值不同,则返回TRUE。我们可以为每个id 返回所有值为TRUE 的列名。

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2021-03-28
    • 1970-01-01
    • 2014-08-18
    相关资源
    最近更新 更多