考虑以下数据
df <- data.frame(a=c("a","a","b"), b=c(3,4,5), c=c(4,5,6))
df$a <- as.factor(df$a)
当a =“a”时,以下命令返回“b”的值。
df[df$a=="a","b"]
[1] 3 4
如何返回此列的第n个值?我尝试了以下操作来返回第一个值,但只返回相同的值。
df[df$a=="a","b",1]
[1] 3 4
我们的想法是最终将这个概念转换为函数中的多个数据帧。
答案 0 :(得分:2)
df[df$a == "a", "b"]
#[1] 3 4
这是一个载体。
is.vector(df[df$a == "a", "b"])
#[1] TRUE
现在要获取向量的第n个元素,可以使用常规索引技术对其进行索引
df[df$a == "a", "b"][1]
#[1] 3
或者
df[df$a == "a", "b"][2]
#[1] 4
为您提供所需的特定价值。
答案 1 :(得分:1)
返回第二个值
df[which(df$a=="a"),"b"][2]
[1] 4
答案 2 :(得分:1)
这基本上是关于在r中对data.frames进行子集化的问题。基本上你做的是:
df[rows, columns]
行和列可以是逻辑的,而整数与行/列索引,名称相同。如果您不指定行和/或列,则将返回所有行和/或列。
df[, columns] #returns all rows and a subset of columns
df[rows, ] #returns all columns and a subset of rows
df[, ] # returns all rows and columns
df[df$a=="a","b"]
返回列&#34; a&#34;的所有行。等于字母&#34; a&#34; (df$a=="a"
返回1] TRUE TRUE FALSE
),然后仅选择列&#34; b&#34;返回向量[1] 3 4
。
然后,您可以通过添加[n]
:
df[df$a=="a", "b"][1]
[1] 3
df[df$a=="a", "b"][2]
[1] 4
答案 3 :(得分:1)
dplyr
选项:
library(dplyr)
df %>%
filter(a == "a") %>% # filter where column a = "a"
slice(2) %>% # get 2nd row
pull(b) # get value as a vector instead of tibble
# [1] 4
或者
df %>%
filter(a == "a") %>% # filter where column a = "a"
pull(b) %>% # get column as a vector instead of tibble
nth(2) # get 2nd value
# [1] 4
答案 4 :(得分:0)
使用 dplyr。
nth(df[df$a == "a", "b"],1)
这里1是向量中的第一个值。