搜索数据帧并返回与数据帧不同的值

问题描述 投票:0回答:2

我有一个巨大的数据框。第一列是名称。我想在控制台中输入名称,然后输出与该名称相对应的预定行。

例如:

Data Frame =    
Name Height Weight Shoes Hats
1 Joe  60     150    13    4
2 Nick 55     100    10    10
3 Dan  80     250    40    50

我想搜索Nick,该函数在第一列中搜索Nick。找到尼克后,它会打印出“鞋”值。因此,它需要在第一列中搜索,然后返回相应的鞋子值。

r dataframe search
2个回答
0
投票

我们可以通过参数来创建要比较的数据,列名和值的函数,然后用[[提取列,进行比较==并提取相应的第二列值

f1 <- function(dat, col1, col2, value) {
            dat[[col2]][dat[[col1]] == value]
     }

f1(df1, "Name", "Shoes", "Nick")
#[1] 10

数据

df1 <- structure(list(Name = c("Joe", "Nick", "Dan"), Height = c(60L, 
55L, 80L), Weight = c(150L, 100L, 250L), Shoes = c(13L, 10L, 
40L), Hats = c(4L, 10L, 50L)), class = "data.frame", row.names = c("1", 
"2", "3"))

0
投票

您可以轻松地使用which查找与“ Nick”关联的行号,然后使用该行号从数据框中选择行。

which(df[,"Name"]=="Nick") #provides row number so....

df[which(df[,"Name"]=="Nick"),] #... will return all rows with the matching name

如果您想在函数中使用它

NameSearch<-function(data, Name, column2search){
  data[which(data[,column2search]==Name),] 
}

NameSearch(df, "Nick", "Name")

我在这里重新创建了示例数据框

df<-data.frame(matrix(c("Joe", 60, 150, 13, 4, "Nick", 55, 100, 10, 10, "Dan", 80, 250, 40, 50), nrow=3, byrow=T))
colnames(df) <- c("Name", "Height", "Weight", "Shoes", "Hats")
© www.soinside.com 2019 - 2024. All rights reserved.