gpt4 book ai didi

r - 按因子选择数据框中的第 n 个元素

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

我有一个包含文本列 name 和因子 city 的数据框。它按字母顺序首先按 city 排序,然后按 name 排序。现在我需要获取一个数据框,它只包含每个 city 中的第 n 个元素,并保持此顺序。如何在没有循环的情况下以漂亮的方式完成?

我有:

name    city
John Atlanta
Josh Atlanta
Matt Atlanta
Bob Boston
Kate Boston
Lily Boston
Matt Boston

我想要一个函数,它返回 city 的第 n 个元素,即,如果它是第 3 个,则:

name    city
Matt Atlanta
Lily Boston

如果 name 超出所选 city 的范围,它应该为 NULL 返回,即,对于第 4 个:

name    city
NULL Atlanta
Matt Boston

请只使用 base R?

最佳答案

在基础 R 中使用 by:

设置一些测试数据,包括一个额外的超出范围的值:

test <- read.table(text="name    city
John Atlanta
Josh Atlanta
Matt Atlanta
Bob Boston
Kate Boston
Lily Boston
Matt Boston
Bob Seattle
Kate Seattle",header=TRUE)

在每个城市获得第 3 个元素:

do.call(rbind,by(test,test$city,function(x) x[3,]))

结果:

        name    city
Atlanta Matt Atlanta
Boston Lily Boston
Seattle <NA> <NA>

为了得到你想要的,这里有一个小函数:

nthrow <- function(dset,splitvar,n) {
result <- do.call(rbind,by(dset,dset[splitvar],function(x) x[n,]))
result[,splitvar][is.na(result[,splitvar])] <- row.names(result)[is.na(result[,splitvar])]
row.names(result) <- NULL
return(result)
}

这样调用它:

nthrow(test,"city",3)

结果:

  name    city
1 Matt Atlanta
2 Lily Boston
3 <NA> Seattle

关于r - 按因子选择数据框中的第 n 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850386/

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