鉴于dataframe如下:
V1 V2 V3
5 8 12
4 9 5
7 3 9
...
Run Code Online (Sandbox Code Playgroud)
如何将列添加到dataframe这3列的最小值和中值,为每行计算?
生成的DF应如下所示:
V1 V2 V3 Min Median
5 8 12 5 8
4 9 5 4 5
7 3 9 3 7
...
Run Code Online (Sandbox Code Playgroud)
我试过用dplyr::mutate:
mutate(df, Min = min(V1,V2,V3))
Run Code Online (Sandbox Code Playgroud)
但这需要整个数据帧的最小值并将该值放在每一行中.我怎样才能获得每一行的最小值和中位数?
对于Mean,我可以使用rowMeansin mutate,但min和median没有类似的函数.
也尝试过,
lapply(df[1:3], median)
Run Code Online (Sandbox Code Playgroud)
但它只产生每列的中位数
dd <- read.table(header = TRUE, text = 'V1 V2 V3
5 8 12
4 9 5
7 3 9')
Run Code Online (Sandbox Code Playgroud) 我有一个相当大的data.table(15M行,15列),我想要计算每行的中位数.我可以这样做
apply(DT, 1, median) # DT is my data.table
Run Code Online (Sandbox Code Playgroud)
但这很慢.是否有更快,更适合数据的替代方案?
作为一个小工作的例子,如果我有
DT = data.table(a = c(1, 2, 4), b = c(6, 4, 7),
c = c(3, 9, 9), d = c(18, 1, -5))
# a b c d
# 1: 1 6 3 18
# 2: 2 4 9 1
# 3: 4 7 9 -5
Run Code Online (Sandbox Code Playgroud)
计算行中位数的最有效方法是什么?
apply(DT, 1, median)
# [1] 4.5 3.0 5.5
Run Code Online (Sandbox Code Playgroud) df我正在尝试使用rowMediansfrom包计算数据框的行中位数matrixStats。
Abundance Sample1 Sample2 Sample3 Sample4 Sample5 Sample6 Sample7
Species1 2 4 0 0 0 6 0
Species2 3 5 6 4 0 0 0
Species3 3 7 2 5 8 0 0
Species4 0 0 3 8 0 0 8
Species5 7 5 6 0 0 4 4
Species6 4 2 3 0 0 2 1
Run Code Online (Sandbox Code Playgroud)
我想计算每行的中位数并将它们附加到新列中。我收到一个错误
参数“x”必须是向量或矩阵
所以我尝试将我的转换df为矩阵。该str函数显示该物种的每个值都是数字,所以我尝试:
library(matrixStats)
matrix(df, rownames.force = NA)
rowMedians(df)
Run Code Online (Sandbox Code Playgroud)
但我仍然遇到同样的错误。任何帮助表示赞赏。
我有一个包含 53 列(ID 列加 52 个数值)的数据框(数据)。我可以添加一个具有以下平均值的列:
data$mean <- rowMeans(data[,2:51],na.rm = TRUE) # add mean of rows
Run Code Online (Sandbox Code Playgroud)
但是,我不能用以下方法对中位数做同样的事情:
data$medians <- rowMedians(month.sum[,2:51],na.rm = TRUE) # add medians of rows
Run Code Online (Sandbox Code Playgroud)
我安装了包含的包matrixStatsrowMedians,但它对我不起作用。