首页 文章

选择具有正值的列

提问于
浏览
1

我正在处理数据帧,我正在尝试使用R来计算包含数据的列名 . 我有一个示例数据框,如下所示:

df <-structure(
  list(
    area = structure(1:9, 
      .Label = c("a", "b", "c", "d", "e", "f", "g", "h", "i"), 
       class = "factor"
    ), 
    cat = c(5L, 0L, 0L, 0L, 0L, 0L, 0L, 3L, 0L), 
    dog = c(0L, 10L, 0L, 0L, 0L, 0L, 0L, 0L, 11L), 
    rabbit = c(0L, 0L, 0L, 3L, 0L, 0L, 0L, 0L, 0L), 
    horse = c(0L, 0L, 8L, 0L, 0L, 0L, 0L, 0L, 0L), 
    sheep = c(0L, 0L, 0L, 0L, 9L, 0L, 0L, 0L, 0L), 
    mouse = c(0L, 0L, 0L, 0L, 0L, 5L, 0L, 0L, 0L), 
    rat = c(0L, 0L, 0L, 0L, 0L, 0L, 2L, 0L, 0L)
  ), 
  .Names = c("area", "cat", "dog", "rabbit", "horse", "sheep", "mouse", "rat"), 
  class = "data.frame", 
  row.names = c(NA, -9L)
)

在从'cat'到'rat'的列中,只有一列中有正值(其余为零) . 我如何让R添加一个名为“animal”的额外列,以便为每个区域提供动物名称(来自列名称),其中有正值,即“动物”列将读取猫,狗,马,兔子,羊等?

我们将非常感激地提供任何帮助或指导 .

提前谢谢了 .

1 回答

  • 1
    df$animal <- names(df)[-1][apply( df[,-1] , 1, which.max )]
    df
    #  area cat dog rabbit horse sheep mouse rat animal
    #1    a   5   0      0     0     0     0   0    cat
    #2    b   0  10      0     0     0     0   0    dog
    #3    c   0   0      0     8     0     0   0  horse
    #4    d   0   0      3     0     0     0   0 rabbit
    #5    e   0   0      0     0     9     0   0  sheep
    #6    f   0   0      0     0     0     5   0    pos
    #7    g   0   0      0     0     0     0   2    pos
    #8    h   3   0      0     0     0     0   0    cat
    #9    i   0  11      0     0     0     0   0    dog
    

相关问题