【问题标题】:Return row number(s) for a particular value in a column in a dataframe返回数据框中列中特定值的行号
【发布时间】:2014-01-27 14:08:38
【问题描述】:

我有一个数据框(df),我想知道如何在同一数据框的4th column (height_chad1) 中返回特定值(2585) 的行号?

我试过了:

row(mydata_2$height_chad1, 2585)

并且我收到以下错误:

Error in factor(.Internal(row(dim(x))), labels = labs) : 
  a matrix-like object is required as argument to 'row'

是否有等效的代码行适用于数据帧而不是类似矩阵的对象?

任何帮助将不胜感激。

【问题讨论】:

    标签: r numbers dataframe row


    【解决方案1】:

    使用which(mydata_2$height_chad1 == 2585)

    简短的例子

    df <- data.frame(x = c(1,1,2,3,4,5,6,3),
                     y = c(5,4,6,7,8,3,2,4))
    df
      x y
    1 1 5
    2 1 4
    3 2 6
    4 3 7
    5 4 8
    6 5 3
    7 6 2
    8 3 4
    
    which(df$x == 3)
    [1] 4 8
    
    length(which(df$x == 3))
    [1] 2
    
    count(df, vars = "x")
      x freq
    1 1    2
    2 2    1
    3 3    2
    4 4    1
    5 5    1
    6 6    1
    
    df[which(df$x == 3),]
      x y
    4 3 7
    8 3 4
    

    正如Matt Weller 指出的,您可以使用length 函数。 plyr 中的 count 函数可用于返回每个唯一列值的计数。

    【讨论】:

    • 如果想找到值 2585 在同一列中出现的次数,我会使用与函数计数类似的构造吗?计数(mydata_2$height_chad1 == 2585)
    • 您可以在 Seth 提供的答案结果中使用 length,或者在您的建议中使用 sum 而不是 count。您是否按照您的建议尝试过count 功能?这是一个简单的测试,没有破坏任何东西的危险......!
    • 不错的解决方案,但是如果您不只是想查看 x 列,如果您想返回数据框中每个单元格等于 3 的行和列值怎么办?
    • @par Try df[which(df$x == 3),] 这将返回 [rows,colums]。留一个空白表示全部。
    • 我正在寻找如何对列进行选择性处理,并使用 data.frame 的行 ID 获得结果。在我的情况下,我找到了一个答案,从@SethB 的答案中只得到了四列。 df[其中(df$x == 3),1:4]
    【解决方案2】:

    which(df==my.val, arr.ind=TRUE)

    【讨论】:

    • 虽然这可能是正确的答案,但最好添加一些对您的代码作用的解释...您能添加一些吗?
    • 我认为我们需要至少 2 票其他版主的投票,他们认为一个简单的问题需要用解释来回答,考虑到源代码是自记录的;否则,毫无根据地要求改进的版主自己希望解释他的行为
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    相关资源
    最近更新 更多