【问题标题】:How to find an specific index in an R data table?如何在 R 数据表中查找特定索引?
【发布时间】:2020-09-03 20:56:19
【问题描述】:

我正在使用 Covid-19 案例表(列是日期,文件是国家/地区)进行 R 项目,我想找到第一列的索引,其中案例数不为零特定国家/地区。

表格是这样的:

我知道如何索引特定国家:例如i_arg <- which(rownames(datos) == "Argentina") 和一个具体的日期。但不是基于特定行和之前行的值满足特定条件的日期(因为我想要第一列的索引,其特定行的值是第一个不为 0 的列特定行)。

我知道这一定是个愚蠢的问题,但我无法在任何地方找到有关如何执行此操作的信息。

这是 MrFlick 建议的前几个国家/地区的数据:

“1/22/20”“1/23/20”“1/24/20”“1/25/20”“1/26/20”“1/27/20”“1/28/ 20" “1/29/20” “1/30/20” “1/31/20” “2/1/20” “2/2/20” “2/3/20” “2/4/20” “2/5/20” “2/6/20” “2/7/20” “2/8/20” “2/9/20” “2/10/20” “2/11/20” “2/12/20” “2/13/20” “2/14/20” “2/15/20” “2/16/20” “2/17/20” “2/18/20” “2/19/20” “2/20/20” “2/21/20” “2/22/20” “2/23/20” “2/24/20” “2/25/20” “2/26/20” “2/27/20” “2/28/20” “2/29/20” “3/1/20” “3/2/20” “3/3/20” “3/4/20” “3/5/20” “3/6/20” “3/7/20” “3/8/20” “3/9/20” “3/10/20” “3/11/20” “3/12/20” “3/13/20” “3/14/20” “3/15/20” “3/16/20” “3/17/20” “3/18/20” “3/19/20” “3/20/20” “3/21/20” “3/22/20” “3/23/20” “3/24/20” “3/25/20” “3/26/20” “3/27/20” “3/28/20” “3/29/20” “3/30/20” “3/31/20” “4/1/20” “4/2/20” “4/3/20” “4/4/20” “4/5/20” “4/6/20” “4/7/20” “4/8/20” “4/9/20” “4/10/20” “4/11/20” “4/12/20”

“阿富汗”0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 4 4 5 7 7 7 11 16 21 22 22 22 24 24 40 40 74 84 94 110 110 120 170 174 237 273 281 299 349 367 423 444 484 521 555 607

“阿尔巴尼亚”0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 10 12 23 33 38 42 51 55 59 64 70 76 89 104 123 146 174 186 197 212 223 243 259 277 304 333 361 377 383 400 409 416 433 446

“阿尔及利亚”0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 3 5 12 12 17 17 19 20 20 20 24 26 37 48 54 60 74 87 90 139 201 230 264 302 367 409 454 511 584 716 847 986 1171 1251 1320 1423 1468 1572 1666 1761 1825 1914

“安道尔”0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 39 39 53 75 88 113 133 164 188 224 267 308 334 370 376 390 428 439 466 501 525 545 564 583 601 601 638

“安哥拉”0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 3 3 3 4 4 5 7 7 7 8 8 8 10 14 16 17 19 19 19 19 19 "安提瓜和巴布达" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 3 3 3 7 7 7 7 7 7 7 9 15 15 15 15 19 19 19 19 21 21

“阿根廷”0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 8 12 12 17 19 19 31 34 45 56 68 79 97 128 158 266 301 387 387 502 589 690 745 820 1054 1054 1133 1265 1451 1451 1554 1628 1715 1795 1975 1975 2142

文件名为“data_covid19.txt”并以这种方式导入

datos <- read.table("data_covid19.txt", header = TRUE, check.names = FALSE)

我想要索引,所以我可以像这样选择我需要的数据:

datos[i_arg, first:last]

地点:

i_arg <- which(rownames(datos) == "Argentina")
last <- which(colnames(datos) == "3/29/20") #specific date

first是满足条件的列的索引

谢谢!

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。数据图片没有帮助,因为我们无法复制/粘贴数据进行测试。最好在问题本身中仅包含一个简单的示例 data.frame。

标签: r indexing


【解决方案1】:

您的数据都有一个共同的类型和两个变量。这是一个强有力的指标,表明它应该构造为数字矩阵,而不是 data.framedata.table。与data.frame 对象相比,矩阵对逐行操作具有更好的开箱即用支持。确实,data.frame 对象及其表亲相对于矩阵的主要优势在于它们支持异构数据类型,而您不需要。

如果你对你的数据是一个矩阵没意见,这很简单:

my_matrix <- matrix(
  data = c(0,0,1,0,5,2,1,2,3),
  nrow = 3,
  ncol = 3,
  dimnames = list(
    c("Albania", "Argentina", "Armenia"),
    c("2020-01-01","2020-02-01", "2020-03-01")
  )
)

> my_matrix

          2020-01-01 2020-02-01 2020-03-01
Albania            0          0          1
Argentina          0          5          2
Armenia            1          2          3

> match(TRUE, my_matrix["Argentina",] > 0)

[1] 2


如果您坚持将您的数据作为data.frame 对象或其表亲之一,则开始需要更复杂的方法。您的数据具有非常简单的结构,因此您可以转置它,但这并不是最佳的。

my_data_frame <- as.data.frame(my_matrix)

> match(TRUE, t(my_data_frame)[,"Argentina"] > 0)

[1] 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2022-01-01
    • 2022-01-17
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多