我不确定这个解决方案是否适合,因为您没有提供minimal reproducible example,但也许是这样的?
library(data.table)
df <- data.frame(X1 = rep(1:50, each = 2),
X2 = rep(x = 1:2, times = 50),
X3 = rep(x = 1:2, times = 50),
X4 = rep(x = 1:2, times = 50),
X5 = rep(x = 1:2, times = 50),
X6 = rep(x = 1:2, times = 50),
X7 = rep(x = 1:2, times = 50),
X8 = rep(x = 1:2, times = 50),
X9 = rep(x = 1:2, times = 50),
X10 = rep(x = 1:2, times = 50)
)
setDT(df)
head(df)
#> X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
#> 1: 1 1 1 1 1 1 1 1 1 1
#> 2: 1 2 2 2 2 2 2 2 2 2
#> 3: 2 1 1 1 1 1 1 1 1 1
#> 4: 2 2 2 2 2 2 2 2 2 2
#> 5: 3 1 1 1 1 1 1 1 1 1
#> 6: 3 2 2 2 2 2 2 2 2 2
df2 <- df[ ,lapply(.SD, mean), by = X1, .SDcols = X2:X10]
head(df2)
#> X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
#> 1: 1 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
#> 2: 2 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
#> 3: 3 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
#> 4: 4 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
#> 5: 5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
#> 6: 6 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
由reprex package (v2.0.0) 于 2021-07-16 创建
--
或者这个?
library(data.table)
df <- data.frame(X1 = 1:100,
X2 = rep(x = 1:2, times = 50),
X3 = rep(x = 1:2, times = 50),
X4 = rep(x = 1:2, times = 50),
X5 = rep(x = 1:2, times = 50),
X6 = rep(x = 1:2, times = 50),
X7 = rep(x = 1:2, times = 50),
X8 = rep(x = 1:2, times = 50),
X9 = rep(x = 1:2, times = 50),
X10 = rep(x = 1:2, times = 50)
)
setDT(df)
head(df)
#> X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
#> 1: 1 1 1 1 1 1 1 1 1 1
#> 2: 2 2 2 2 2 2 2 2 2 2
#> 3: 3 1 1 1 1 1 1 1 1 1
#> 4: 4 2 2 2 2 2 2 2 2 2
#> 5: 5 1 1 1 1 1 1 1 1 1
#> 6: 6 2 2 2 2 2 2 2 2 2
df2 <- df[, lapply(.SD, mean, na.rm=TRUE), X1-0:1]
head(df2)
#> X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
#> 1: 1 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
#> 2: 3 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
#> 3: 5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
#> 4: 7 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
#> 5: 9 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
#> 6: 11 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
由reprex package (v2.0.0) 于 2021-07-16 创建