我有这样一个数据
df<-structure(list(T = c(36034L, 63763L, 51432L, 65100L, 61444L,
71012L, 266610L, 389787L, 47659L, 63156L, 84593L, 84331L), T.1 = c(45632L,
66505L, 60360L, 36685L, 107551L, 53360L, 323952L, 344944L, 69601L,
51268L, 130665L, 59704L), T.2 = c(59025L, 52837L, 68571L, 35788L,
75262L, 66601L, 424683L, 340948L, 79487L, 42809L, 95607L, 81739L
), BG = c(74767L, 48210L, 70972L, 67705L, 85576L, 89265L, 393380L,
306633L, 77816L, 73611L, 106317L, 116890L), BG.1 = c(50846L,
37970L, 63896L, 78296L, 81216L, 62308L, 62613L, 21770L, 80955L,
88832L, 97586L, 68345L), BG.2 = c(26688L, 27830L, 17010L, 54074L,
26727L, 31109L, 24448L, 38701L, 17378L, 46327L, 25324L, 25325L
), TR = c(16498L, 26604L, 41201L, 38417L, 43709L, 33217L, 69943L,
80638L, 37444L, 31701L, 46781L, 31152L), TR.1 = c(16272L, 24485L,
14546L, 74756L, 28193L, 770L, 72238L, 78418L, 9161L, 48618L,
26466L, 1078L), TR.2 = c(20612L, 713L, 18114L, 57872L, 25684L,
27985L, 73618L, 1770L, 11953L, 33347L, 25824L, 25860L)), row.names = c("A",
"B", "C", "D", "E", "F", "A_Mo1", "B_Mo1", "C_Mo1", "D_Mo1",
"E_Mo1", "F_Mo1"), class = "data.frame")
我试图得到中位数为每一行的基础上,每3列。我已经尝试了很多事情,但没有成功。
第一途径
apply(df, 2, FUN = median)
另一种方式
dataused <- c("1:3","4:6","7:9")
medians <- sapply(dataused,function(y)
c(by(df[,eval(parse(text=y))],median(unlist(x)))))
4条答案
按热度按时间bgtovc5b1#
一个选项是
rowMedians
或仅使用
base R
或基于列名模式的
split
uyto3xhc2#
您可以在
base
中使用apply
系列函数来实现。ohtdti5x3#
您没有指定要计算哪些列的中位数。但是您可以使用
apply
和MARGIN
参数作为1
,它按行执行操作。根据data.frame
的大小,它可能会稍微低效。假设您想对前三列执行此操作:结果:
为了完整性,使用
data.table
:wn9m85ua4#
可以使用dplyr和rowwise()