【发布时间】:2016-03-09 21:20:18
【问题描述】:
假设dataframe 看起来像:
V1 V2 V3
5 8 12
4 9 5
7 3 9
...
如何将列添加到dataframe 以获取这 3 列的最小值和中值,为每一行计算?
生成的 DF 应如下所示:
V1 V2 V3 Min Median
5 8 12 5 8
4 9 5 4 5
7 3 9 3 7
...
我尝试使用dplyr::mutate:
mutate(df, Min = min(V1,V2,V3))
但这需要整个数据帧的最小值并将该值放在每一行中。如何获取每行的最小值和中位数?
对于 Mean,我可以在 mutate 中使用 rowMeans,但是对于 min 和 median 没有类似的函数。
也试过了,
lapply(df[1:3], median)
但它只是产生每列的中位数
dd <- read.table(header = TRUE, text = 'V1 V2 V3
5 8 12
4 9 5
7 3 9')
【问题讨论】:
-
你试过
apply(df,1,median)吗? -
你可以根据命名约定
rowMeansgoogle,发现已经开发了同名函数rowMins和rowMedians -
df[c('min','median')] <- lapply(list(min, median), function(x) apply(df, 1, x)) -
因为
cbind(df,t(apply(df,1,quantile,c(0,0.5))))显然需要 5 个以上的答案。
标签: r