gpt4 book ai didi

r - 查找数据框对角线上的所有零

转载 作者:行者123 更新时间:2023-12-04 11:23:23 25 4
gpt4 key购买 nike

我不知道之前是否有人问过这个问题,所以我想继续发布它。
我有一个如下所示的数据框:

YEAR    CountyCode         C01   C02 C03 C04 C05 C06 . . .  
2012 C01 132 0 3 1 4 9
2012 C02 0 21 0 57 0 0
2012 C03 0 0 56 0 1 1
2012 C04 0 6 0 40 0 26
2012 C06 0 0 1 0 0 0
2012 C07 0 0 1 32 219 6
. .
. .
. .
2013 C01 220 9 2 4 0 0
2013 C02 0 54 0 62 0 2
2013 C03 0 0 24 0 1 1
2013 C04 0 6 0 224 0 2
2013 C06 0 0 2 0 0 0
2013 C07 0 0 1 37 2 3

以此类推 5 年的数据。每年与 75 个列相关联,其中条目“C0x”与县代码下的特定“C0x”相关联。基本上它是一种付款人矩阵。

CountyCode 下的所有行都是正确的(大约有 65 个正确的行),而垂直列并不都是正确的。有非常具体的县代码(例如,1、2、3、4、6 等)。

因此,正如您所看到的,C05 与 C05 不匹配,因为它实际上并不存在,而且对角线上有一个中断。因为表格格式是为了任何人都可以使用它,所以输入值的人显然犯了重大错误。

唯一的目标是找到列不正确的对角线上的所有值并打破对角线。我想清除这些。例如,在 C05(列)和 C06 行(在县代码下)下,2012-2016 年为零。输出可以只是一个简单的列表,如下所示: [1] C05,C40, ...所以我可以找到这些异常值并更好地定位它们。

关键是要在列中找到错误的县。

PS:每年大约有 65(行)x 75(列),虽然我可以尝试手动进行,但我想对其进行编码,以便可以进一步使用。

谢谢!

最佳答案

使用 data.table 的可能解决方案-包裹:

library(data.table)
setDT(df)

df[, .(cols_not_in_rows = setdiff(names(.SD)[-1], CountyCode),
rows_not_in_cols = setdiff(CountyCode, names(.SD)[-1]))
, by = YEAR]

这使:

   YEAR cols_not_in_rows rows_not_in_cols
1: 2012 C05 C07
2: 2013 C05 C07


使用数据:
df <- structure(list(YEAR = c(2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2013L, 2013L, 2013L, 2013L, 2013L, 2013L),
CountyCode = c("C01", "C02", "C03", "C04", "C06", "C07", "C01", "C02", "C03", "C04", "C06", "C07"),
C01 = c(132L, 0L, 0L, 0L, 0L, 0L, 220L, 0L, 0L, 0L, 0L, 0L),
C02 = c(0L, 21L, 0L, 6L, 0L, 0L, 9L, 54L, 0L, 6L, 0L, 0L),
C03 = c(3L, 0L, 56L, 0L, 1L, 1L, 2L, 0L, 24L, 0L, 2L, 1L),
C04 = c(1L, 57L, 0L, 40L, 0L, 32L, 4L, 62L, 0L, 224L, 0L, 37L),
C05 = c(4L, 0L, 1L, 0L, 0L, 219L, 0L, 0L, 1L, 0L, 0L, 2L),
C06 = c(9L, 0L, 1L, 26L, 0L, 6L, 0L, 2L, 1L, 2L, 0L, 3L)),
.Names = c("YEAR", "CountyCode", "C01", "C02", "C03", "C04", "C05", "C06"), class = "data.frame", row.names = c(NA, -12L))

关于r - 查找数据框对角线上的所有零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50414224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com