簡體   English   中英

R中多列的每個行名(1、2或A,B ..)的最大值

[英]a maximum value per rowname(1, 2, or A, B..) per multiple columns in R

我想要每個多列(樣本)的每個行名(1、2或A,B ..)的最大值。

我有一個矩陣。

id sample1 sample2 sample3 ...
1 16498 2416 12555.5
1 21282.5 3342 22202
2 18558 2308 na
2 17966 3047 na
2 398 176.5 na 
3 347 227 201.5
3 604.5 284.5 300 
3 517.5 283.5 330.5
3 3709 2338 5709
4 1 2 1
...

接着,

id sample1 sample2 sample3 ...
1 21282.5 3342 22202
2 18558 3047 na
3 3709 2338 5709
4 1 2 1
...

請給我一些關於這個問題的建議。 提前致謝!!

另一個選擇,使用data.table

require(data.table)
data.table(df)[, lapply(.SD, max), by=id]

#    id sample1 sample2 sample3
# 1:  1 21282.5    3342   22202
# 2:  2 18558.0    3047      NA
# 3:  3  3709.0    2338    5709

也將na視為NA

與@akrun矩陣m1

data.table(m1)[, lapply(.SD, max), by=id]
#   id sample1 sample2 sample3
#1:  1 21282.5    3342   22202
#2:  2 18558.0    3047      NA
#3:  3  3709.0    2338    5709
#4:  4     1.0       2       1

嘗試

library(dplyr)
as.data.frame(m1) %>%
              group_by(id)%>%
              summarise_each(funs(max=max(., na.rm=TRUE)))
#  id sample1 sample2 sample3
#1  1 21282.5    3342   22202
#2  2 18558.0    3047      NA
#3  3  3709.0    2338    5709
#4  4     1.0       2       1

要么

aggregate(.~id, as.data.frame(m1), FUN= max, na.rm=TRUE, na.action=NULL)

注意:我猜您在數據集中有真實的NAs

數據

m1 <- structure(c(1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 16498, 21282.5, 18558, 
17966, 398, 347, 604.5, 517.5, 3709, 1, 2416, 3342, 2308, 3047, 
176.5, 227, 284.5, 283.5, 2338, 2, 12555.5, 22202, NA, NA, NA, 
201.5, 300, 330.5, 5709, 1), .Dim = c(10L, 4L), .Dimnames = list(
NULL, c("id", "sample1", "sample2", "sample3")))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM