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

时间:2018-03-06 19:42:23

标签: r

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

例如:

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列是非数字数据,因此无法正常工作。

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

2 个答案:

答案 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

答案 1 :(得分: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