全部,
我希望有人能找到解决我的问题的解决方案,但不一定会引起头痛,但截至目前,在为我正在处理的项目创建数据集时,可能会出现人为错误。
我现在使用的数据集是1950年至2010年之间每年针对特定国家/地区对的有向双年(A vs. B,B vs. A)数据集。某些国家/地区,例如我的A,将与世界上每个国家配对,并且每个国家都将与之配对。有些国家,例如我的示例中的B和C,将仅与少数几个国家配对。一些对将缺少数据,在我的示例中没有显示。
我想做的是使用R查找给定国家/地区在给定年份中给定列的最大值,并将该值插入另一个数据框中。希望此插图可以阐明我想做的事情。
country1 country2 year x1 x2 x3 x4
A B 2000 50 30 1 20
A C 2000 70 2 5 90
A D 2000 10 90 20 30
A E 2000 95 10 10 5
A F 2000 10 10 10 0
A G 2000 5 5 0 0
A H 2000 10 30 25 40
........................................
B A 1998 5 10 30 2
B D 1998 30 6 9 0
B I 1998 10 9 7 0
........................................
C A 2005 10 15 2 6
C D 2005 90 0 0 40
C X 2005 49 90 5 0
举例来说,我对2000年的国家A感兴趣。我想知道它x1
在2000年的最大值(与国家E配对时为95)。我也想知道什么是它的最大价值x2
,x3
以及x4
在该年度(分别是90,25,90与国家d,H国和C国)的任何配对。
1998年的B国和2005年的C国也是如此。
在给定年份隔离给定国家/地区的这些列的最大值之后,我想将这些值转储到数据框中,如下所示。
country year x1max x2max x3max x4max
A 2000 95 90 25 90
B 1998 30 10 30 2
C 2005 90 90 5 40
我在这方面很灵活。将每个国家/地区的最大值最大值转储到其自己的1x5尺寸数据框中,然后用于rbind
将它们堆叠在一起,这可能是最简单的。
有人对如何进行有任何建议吗?这免除了我必须手动执行的麻烦,这比任何其他事情都更容易引起人为错误。
但是,由于我的问题确实取决于为特定国家/地区隔离特定年份(例如,国家A的2000年而不是2001年),因此出现了可重复的代码,我不确定可重复的代码是否一定会有所帮助。我希望至少我的问题是明确的。
country1 <- c("A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "C", "C", "C")
country2 <- c("B","C","D","E","F","G","H","A","D","I","A","D","X")
year <- c(2000, 2000, 2000, 2000, 2000, 2000, 2000, 1998, 1998, 1998, 2005, 2005, 2005)
x1 <- c(50, 70, 10, 95, 10, 5, 10, 5, 30, 10, 10, 90, 49)
x2 <- c(30, 2, 90, 10, 10, 5, 30, 10, 6, 9, 15, 0, 90)
x3 <- c(1, 5, 20, 10, 10, 0, 25, 30, 9, 7, 2, 0, 5)
x4 <- c(20, 90, 30, 5, 0,0,40,2,0,0,6,40,0)
Data=data.frame(country1=country1,country2=country2,year=year,x1=x1,x2=x2,x3=x3,x4=x4)
Data
听起来您只是在寻找aggregate
:
> aggregate(cbind(x1, x2, x3, x4) ~ country1 + year, Data, max)
country1 year x1 x2 x3 x4
1 B 1998 30 10 30 2
2 A 2000 95 90 25 90
3 C 2005 90 90 5 40
从您的问题中并不清楚,但是您想如何从那里开始。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句