【问题标题】:R calculate mode for three columns by IDR按ID计算三列的模式
【发布时间】:2021-07-03 15:13:14
【问题描述】:

我的数据框有几个单一的数据(“体重”、“温度”)和三个后肢紧握分数(“后肢_1”、“后肢_2”、“后肢_3”);都是在不同年龄(“年龄”)拍摄的。

str(hindlimb_data)
'data.frame':   10 obs. of  12 variables:
 $ ID            : Factor w/ 25 levels "26623","26625",..: 2 4 3 5 6 12 9 14 10 15
 $ Sex           : int  2 2 2 2 2 2 2 2 2 1
 $ Genotype      : Factor w/ 3 levels "NTg","Transgenic_1",..: 3 2 3 2 2 3 2 3 2 3
 $ Group         : Factor w/ 2 levels "Cross_sect","Longitudinal": 2 2 2 2 1 1 1 1 1 1
 $ Age           : num  8 8 8 8 8.5 7.5 7.5 7.5 7.5 7.5
 $ Weight        : num  30.8 31.2 28 27.5 32 33.2 26.7 32.5 27.2 29.2
 $ Temperature   : num  24.8 25.6 26.5 24.4 24.4 25.9 24.4 24.2 23.9 23.9
 $ Hindlimb_1    : num  2 2 3 0 2 2 0 2 2 0
 $ Hindlimb_2    : num  2 0 3 0 0 3 0 2 0 0
 $ Hindlimb_3    : num  2 0 3 0 0 2 0 2 0 1
 

我正在尝试为每个主题(“ID”)计算三个 Hindlimb 拍手数据得分(“Hindlimb_x”)的模式。我似乎只能在单独的行中长期输入每个分数时才能计算出这个(但这会重复我数据框中其他变量的值;例如体重、温度)。

关于如何编码的任何想法? 谢谢!

【问题讨论】:

  • 能否请您附上您尝试的代码。你尝试过做什么?
  • 嗨,我编写了 Mode 函数:
  • 模式
  • 然后运行这段代码为 Mode 创建一个新变量:
  • hindlimb_data$hindlimb_mode % group_by(ID) %>% summarise(across(starts_with('Hindlimb_'), Mode), .groups = 'drop')

标签: r mode


【解决方案1】:

我们按'ID'分组并循环acrossstarts_with'Hindlimb_'的列并返回summariseed'Mode'

library(dplyr)
df1 %>%
    group_by(ID) %>%
    summarise(across(starts_with('Hindlimb_'), Mode), .groups = 'drop')

在哪里

Mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

【讨论】:

  • 这似乎输出变量“ID”、“Hindlimb_1”、“Hindlimb_2”和“Hindlimb_3”,但我没有计算出模式
  • @asud 我在帖子中展示了Mode 函数。不清楚你的意思
猜你喜欢
  • 2020-10-03
  • 2021-02-17
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多