当前位置: 首页 > 知识库问答 >
问题:

挑选具有正值的列

成浩漫
2023-03-14

我正在处理一个数据帧,并试图使用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)
)

在从“猫”到“老鼠”的列中,只有一列有正值(其余的是零)。我如何让R添加一个名为“动物”的额外列,给我每个区域的动物名称(从列名),其中有正值,即“动物”列将读作猫、狗、马、兔子、羊等?

我们将不胜感激地接受任何帮助或指导。

非常感谢。

共有1个答案

巫马修为
2023-03-14
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
 类似资料:
  • VM挑选 Python解释器或Python虚拟机有很多种实现,CPython是最主流的实现。CPython同时也是别的虚拟机实现的参考解释器。 PyPy是用Python实现的Python解释器,Jython是用Java实现运行在JVM上的解释器,IronPython是用Microsoft .NET CLR实现的解释器。 除非解释器的选择非常非常重要,我们一般都用CPython。 如果上面那些关于版

  • 我试图修复Intellij和Mapstruct的一个问题。 之前我使用过Java8和Gradle4.6,并且Mapstruct运行良好。现在我已经将Java升级到11,Gradle升级到4.10.3。现在的问题是,在构建之后,当我运行应用程序时,我以unsatifiedDependencyException告终,因为某些映射器类不可用。我已经讨论了很多问题,其中大多数都建议将Intellij构建/

  • 这些查询需要将字符串转换为日期,因为时间戳存储为字符串,并且日志应用程序是不可更改的。 我有一个完美的选择查询 - 这将从我的表中选择所有但最近添加的用户ID和时间戳。 但是,当我尝试将其插入到另一个表中时...就像这样—— 我得到以下错误- 这样做的原因是因为我的时间戳以两种格式存储。一种在非夏令时存储为“CST”,另一种在夏令时存储为“CDT”。当INSERT INTO SELECT到达与我查

  • 问题内容: 这是我的表结构: 我需要它仅返回这些行 意思是我只想要每个文件具有最新版本的功能。 我不想要下面的结果,即不是最新版本的唯一函数ID 我看过如何通过SQL中的另一列来选择具有MAX(列值),DISTINCT的行?,但会返回最新的唯一函数ID。 该查询必须与sqlite3兼容。 问题答案: 一种有效的方法通常是使用: 此查询可以利用上的索引。 这将查询重新表述为:“从表中获取其中相应文件

  • 问题内容: 我有一张桌子,像这样: 我想选择具有相同基因座和染色体的所有行。例如,第3行和第4行。一次可能有2个以上,并且它们可能不是按顺序排列的。 我尝试了这个: 但是,即使重复,它总是返回第3行,从不返回第4行。我想我缺少明显而简单的东西,但我茫然。 有人可以帮忙吗? 问题答案: 您需要了解,当您在查询中包含内容时,您是在告诉SQL合并行。您将为每个唯一值获得一行。在随后过滤这些组。通常,您可

  • 问题内容: 我有以下提供商列表(俄语): 这些显然是在unicode中。以前,要执行SQL SELECT,我正在做: 现在,由于列表项使用的是unicode,因此我遇到了。 我将如何正确执行此sql语句? 问题答案: 您不应该用来在sql查询中包含值。改用sql参数: 原始清单在哪里。 想法是使用与列表中提供者数量匹配的SQL参数语法,通过测试生成SQL查询:对于两个提供者的列表。是的,MySQL

  • 我有一个具有多个可选和非捕获组的正则表达式。所有这些组都可能发生,但不必发生。正则表达式应使用非捕获组返回整个字符串。 当我将最后一个组也设置为可选时,正则表达式将具有多个分组结果。当我将第一组设置为非可选时,正则表达式匹配。为什么? 输入将类似于,预期输出。 提前感谢!