平均数值数据但保留分类数据

问题描述 投票:0回答:2

我希望结合重复的主题,但我的一些数据是数字的,一些是绝对的。分类值是重复的,但数值数据可能不同。我想平均数值数据但合并分类数据。

例如:

Subject A   B
   1    L   1
   1    L   0
   2    R   1
   2    R   1
   3    L   0
   3    L   1
   4    R   1
   4    R   1

这就是我想要的样子:

Subject A   B
   1    L   0.5
   2    R   1
   3    L   0.5
   4    R   1

我尝试使用aggregate()但由于A列是非数字数据,因此无效。

关于如何解决这个问题的想法?谢谢!

r
2个回答
0
投票

你可以使用dplyr

library(dplyr)
df2 <- df1 %>%
  group_by(Subject, A) %>%
  summarize_if(is.numeric, mean) %>%
  data.frame()  # if you want a data frame

收益率:

> df2
  Subject A   B
1       1 L 0.5
2       2 R 1.0
3       3 L 0.5
4       4 R 1.0

0
投票

使用data.table

df <- read.table(text = "Subject A   B
   1    L   1
                 1    L   0
                 2    R   1
                 2    R   1
                 3    L   0
                 3    L   1
                 4    R   1
                 4    R   1", 
                 header = TRUE, stringsAsFactors = FALSE)

library(data.table)

setDT(df)
df[, id := .N, by = c("Subject", "A")]
df[, avg := sum(B) / id, by = c("Subject", "A")]
df[, c("B", "id") := NULL]
df <- unique(df)
setnames(df, "avg", "B")

   Subject A   B
1:       1 L 0.5
2:       2 R 1.0
3:       3 L 0.5
4:       4 R 1.0
© www.soinside.com 2019 - 2024. All rights reserved.