gpt4 book ai didi

根据因素删除重复的行

转载 作者:行者123 更新时间:2023-12-04 12:06:08 25 4
gpt4 key购买 nike

我想从由不同因子和条件(例如最高均值或 sd)分层的数据框中删除重复的行。

一些数据,a是行的因子和 id。

set.seed(13654)
a<- sort(c(1,1,4,1,2,3,2,3,1,5))
b<- matrix(runif(100,min = 6,max = 14),nrow = 10)
c<- data.frame(a,b)

例如,我想减少具有最高平均值的行上的最终数据集。
# calculate means per row
gr <- cbind(a,M=rowMeans(c[,-1]))
# get rows stratified by a with highest mean:
gr1 <- aggregate(M~a,gr,which.max)
gr1
a M
1 1 3
2 2 2
3 3 1
4 4 1
5 5 1

因此,因子级别 1 的第三行,因子级别 2 的第二行,... 应包含在新数据框中。我想避免循环。我试过的是 split数据然后使用 lapply ,但到目前为止还没有工作。
cl <- split(c,a)
# this function does not work it will select not the correct rows.
lapply(cl, "[", gr1, )

我的最终目标是这样的函数:
remove.dupl <- function(data,factor,method=c(highest.mean,highest.sd,lowest.sd,...))

您能否为我的问题提供一些提示或解决方案。按照我的工作流程,我需要一个“操作方法”来使用 "["正确使用 lapply 从数据框列表中选择不同的行。

最佳答案

试试 by()功能:

set.seed(13654)
a <- sort(c(1,1,4,1,2,3,2,3,1,5))
b <- matrix(runif(100,min = 6,max = 14),nrow = 10)
c <- data.frame(a,b)
myfun <- function(x) which.max(rowMeans(x)) # just replicating your example, you could define other functions here
d <- by(data = c, INDICES = c$a, function(x) x[myfun(x), ]) # use by() to select rows, based on myfun()
d <- do.call(rbind, d) # turn result of by() function into a data frame

关于根据因素删除重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34435268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com