我希望结合重复的主题,但我的一些数据是数字的,一些是绝对的。分类值是重复的,但数值数据可能不同。我想平均数值数据但合并分类数据。
例如:
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列是非数字数据,因此无效。
关于如何解决这个问题的想法?谢谢!
你可以使用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
使用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