我有一个巨大的数据框。第一列是名称。我想在控制台中输入名称,然后输出与该名称相对应的预定行。
例如:
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。找到尼克后,它会打印出“鞋”值。因此,它需要在第一列中搜索,然后返回相应的鞋子值。
我们可以通过参数来创建要比较的数据,列名和值的函数,然后用[[
提取列,进行比较==
并提取相应的第二列值
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"))
您可以轻松地使用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")