代码之家  ›  专栏  ›  技术社区  ›  user2568648

从行子集返回值

r
  •  0
  • user2568648  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  2
  •   zx8754    7 年前
    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
    

    这为您提供了所需的特定价值。

        2
  •  1
  •   Fouad Selmane    7 年前

    返回第二个值

    df[which(df$a=="a"),"b"][2]
    [1] 4
    
        3
  •  1
  •   clemens    7 年前

    这从根本上讲是一个关于数据子集的问题。r中的帧。基本上你要做的是:

    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"] 返回列“a”等于字母“a”的所有行( df$a=="a" 退货 1] TRUE TRUE FALSE )然后只选择返回向量的列“b” [1] 3 4 .

    然后可以通过添加 [n] :

    df[df$a=="a", "b"][1]
    [1] 3
    df[df$a=="a", "b"][2]
    [1] 4
    
        4
  •  1
  •   zx8754    7 年前

    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
    
        5
  •  0
  •   dondapati    7 年前

    nth(df[df$a == "a", "b"],1)
    

    这里1是向量中的第一个值。