gpt4 book ai didi

R - 比较多列并创建指示匹配的新列

转载 作者:行者123 更新时间:2023-12-02 08:30:18 25 4
gpt4 key购买 nike

我想知道如何将多列与单列中的值进行比较,然后使用这些匹配项创建差异表。我有一个政策结果的政治数据集,以及某些组织是否支持或反对这些结果,按年份划分。这是一些模拟数据:

结果 0 表示法律从未发生,结果 1 表示发生了。对于组织而言,负数表示他们反对该法律,正数表示他们支持该法律:

set.seed(123)
Data <- data.frame(
year = sample(1998:2004, 200, replace = TRUE),
outcome = sample(0:1, 200, replace = TRUE),
union = sample(-1:1, 200, replace = TRUE),
chamber = sample(-1:1, 200, replace = TRUE),
pharma = sample(-1:1, 200, replace = TRUE),
gun = sample(-1:1, 200, replace = TRUE),
dem = sample(-1:1, 200, replace = TRUE),
repub = sample(-1:1, 200, replace = TRUE)
)

我想知道一个组织每年有多少次得到工会的支持或反对。

我想它会是这样的表,其中匹配等于 1,否则为 -1(数据中也有许多 NA,组织不采取任何立场):

DATA$contra <- ifelse(DATA$union == page.bin$chamber, 1, -1)

在数据集中,连续列中大约有 50 个组织。为每场比赛创建 50 个新列似乎很笨拙。即使这是最好的方法,我也不知道如何应用该函数来创建 50 个新列。

最后,我想创建一个热图或一种方法来可视化哪些组织与联合列匹配。但是,首先,我认为,我需要某种数据表。

感谢您的帮助!

最佳答案

当您说“我想知道一个组织每年有多少次得到工会的支持或反对”。然后我假设您想要协议(protocol)的净数量,即发生 1/1 投票或 -1/-1 投票配对,并且您希望从中减去不同意的数量,而不关心数量其中一张票是 0 次。

在运行您的代码之前,我使用了 set.seed(123) 以便可以重现:

> head(Data)
year outcome union chamber pharma gun dem repub
1 2000 0 1 -1 0 -1 1 -1
2 2003 1 -1 1 0 0 1 -1
3 2000 1 1 -1 -1 -1 0 -1
4 2004 1 0 -1 -1 1 1 0
5 2004 0 0 -1 -1 1 0 -1
6 1998 1 0 1 1 0 1 1

> head( Data[-(1:3)] * Data[[3]])
chamber pharma gun dem repub
1 -1 0 -1 1 -1
2 -1 0 0 -1 1
3 -1 -1 -1 0 -1
4 0 0 0 0 0
5 0 0 0 0 0
6 0 0 0 0 0

这使得 1/1 和 -1/-1 对都是 ==1 和 -1/1 和 1/-1 对 ==-1 和其他==0。现在可以按年份汇总:

> head( aggregate( Data[-(1:3)] * Data[[3]], Data[1], sum) )
year chamber pharma gun dem repub
1 1998 0 -2 1 2 6
2 1999 0 0 2 4 3
3 2000 -3 2 -3 -4 -11
4 2001 2 3 2 9 1
5 2002 0 -1 7 9 1
6 2003 0 -2 -11 5 -2

如果您只想要协议(protocol)的总和,那将是:

>  aggregate( Data[-(1:3)] * Data[[3]], Data[1], function(x) {sum(x==1)} )
year chamber pharma gun dem repub
1 1998 5 4 5 7 9
2 1999 8 7 7 9 9
3 2000 5 8 5 3 3
4 2001 7 9 7 11 4
5 2002 7 6 11 12 9
6 2003 7 5 1 8 5
7 2004 4 4 9 2 4

关于R - 比较多列并创建指示匹配的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27660516/

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