当我有一个类似的数据框时;
C1 C2 C3 C4 C5
R1 27 38 94 40 4
R2 69 16 85 2 15
R3 30 35 64 95 6
R4 20 33 77 98 55
R5 20 44 60 33 89
R6 12 88 87 44 38
,我想计算C4到C5列的平均值。之后,我只想保留高于50的行。
由于只有R4和R5行满足条件,所以我的最终输出应该是:
C1 C2 C3 C4 C5 Average C4:C5
R4 20 33 77 98 55 77
R5 20 44 60 33 89 61
我该怎么做?
答案 0 :(得分:1)
您可以使用:
subset(transform(df, Avg = (C4 + C5)/2), Avg > 50)
# C1 C2 C3 C4 C5 Avg
#R3 30 35 64 95 6 50.5
#R4 20 33 77 98 55 76.5
#R5 20 44 60 33 89 61.0
或在dplyr
中:
library(dplyr)
df %>% mutate(Avg = (C4 + C5)/2) %>% filter(Avg > 50)
如果要考虑计算许多列,则可以使用rowMeans
。
cols <- paste0('C', 4:5)
df$Avg <- rowMeans(df[cols])
subset(df, Avg > 50)