从行子集返回值

时间:2017-10-11 08:04:18

标签: r

考虑以下数据

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

我们的想法是最终将这个概念转换为函数中的多个数据帧。

5 个答案:

答案 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是向量中的第一个值。