R数据框中的查找值,尽可能简单
Lookup value in R dataframe, as simple as possible
我有这个数据框:
df <- data.frame(x=c(1,2,3), y=c("a","b","c"))
所以我需要从链接到 x==2
的列 y
中获取值。我看到很多用户使用 merge()
,但是否有另一种方法可以简单地做到这一点,只有一个功能?
类似 lookup(df$x, x==2)
的东西以获得价值 "b"
通常,当您有两个数据框要与许多列组合时,merge
是更好的方法。
这里可以使用match
:
df$y[match(2, df$x)]
#[1] "b"
或者:
df$y[df$x == 2]
如果 df$x
是像 1:3
这样的序列,您可以直接使用 []
:
df$y[2]
#[1] "b"
或者如果 df$x
是一个带间隙的正整数:
lookup <- NA
lookup[df$x] <- df$y
lookup[2]
#[1] "b"
或者如果 df$x
可以用作 character
lookup <- setNames(df$y, df$x)
lookup["2"]
# 2
#"b"
或使用 environment
通过使用它的哈希来加速搜索:
lookup <- list2env(as.list(setNames(df$y, df$x)))
lookup$"2"
#[1] "b"
我有这个数据框:
df <- data.frame(x=c(1,2,3), y=c("a","b","c"))
所以我需要从链接到 x==2
的列 y
中获取值。我看到很多用户使用 merge()
,但是否有另一种方法可以简单地做到这一点,只有一个功能?
类似 lookup(df$x, x==2)
的东西以获得价值 "b"
通常,当您有两个数据框要与许多列组合时,merge
是更好的方法。
这里可以使用match
:
df$y[match(2, df$x)]
#[1] "b"
或者:
df$y[df$x == 2]
如果 df$x
是像 1:3
这样的序列,您可以直接使用 []
:
df$y[2]
#[1] "b"
或者如果 df$x
是一个带间隙的正整数:
lookup <- NA
lookup[df$x] <- df$y
lookup[2]
#[1] "b"
或者如果 df$x
可以用作 character
lookup <- setNames(df$y, df$x)
lookup["2"]
# 2
#"b"
或使用 environment
通过使用它的哈希来加速搜索:
lookup <- list2env(as.list(setNames(df$y, df$x)))
lookup$"2"
#[1] "b"