传递键值并从数据帧返回名称列表的函数,R



我对R有点生疏,对panda更熟悉,但我想不出它的语法会如何。有没有一种方法可以构建一个函数,将键值传递到数据帧中,并返回与该键值相关的名称列表?

类似的东西。。。

#Example df Data
Name    JobID
Ted     1
Bill    1
Frank   2
Ox      3
FindName <- function(x){
value = df.loc[(df['JobID'] == x), 'Name']
outList = value.iloc[0]
return outList
NameList <- FindName(df$JobID)

这里有一个例子,它使用数据集中内置的mtcar返回向量/列x中的元素(对您来说,这将是Name(,其中向量/列的元素y(对您而言,这将为JobID(与值v(对您来讲,这将成为1(匹配。

findName <- function(x, y, v) {
x[y == v]
}
findName(rownames(mtcars), mtcars$cyl, 4)

事实是,你真的不需要把它作为一个函数来做,这是没有必要的。如果只在需要df$Name[df$JobID == 1]时直接编写,工作量会更小。使用您的数据,上述解决方案返回:

> findName(df1$Name, df1$JobID, 1)
[1] Ted  Bill
Levels: Bill Frank Ox Ted
> df1$Name[df1$JobID == 1]
[1] Ted  Bill
Levels: Bill Frank Ox Ted

它们的工作方式是执行线性搜索以返回逻辑向量(TRUE/FALSE;看看只执行df$JobID == 1时会发生什么(,然后将该逻辑向量传递给Name向量的子集,使其成为逻辑向量为TRUE的向量。

您可以使用filter为特定的JobID选择数据,并提取唯一的Name

library(dplyr)
FindName <- function(data, id) {
data %>% filter(JobID == id) %>% pull(Name) %>% unique
}
FindName(df, 1)
#[1] "Ted"  "Bill"
FindName(df, 3)
#[1] "Ox"

最新更新