r - 查找一列的最大值(按组)并将值插入到 R 中的另一个数据框中

标签 r data-manipulation

全部,

我希望有人能找到解决我的问题的方法,这个问题不一定会引起头痛,但就目前而言,在为我正在处理的项目创建数据集时可能会出现人为错误工作。

我现在使用的数据集是针对 1950 年至 2010 年间每年选定的国家/地区对的定向双年(A 与 B,B 与 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 感兴趣。我想知道它在 2000 年的 x1 的最大值是多少(即 95,与E 国)。我还想知道在给定年份的任何配对中 x2x3x4 的最大值是多少(90, D国、H国、C国分别为25、90)。

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(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

虽然从你的问题中你想如何从那里开始并不是很清楚....

关于r - 查找一列的最大值(按组)并将值插入到 R 中的另一个数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17539696/

相关文章:

用 car 重新编码变量 - 意外地将变量(.x 值)视为 NA

arrays - 与不同 ID 关联的查找和求和值

python - 是否可以将 Pandas 日期时间转换为工作日/周末和季节?

r - 使用 setNames 替换 R 数据框列中的多个值时出现奇怪的行为

r - 为什么 lubridate 似乎会更改组合成矢量的两个日期的时区?

sql-server - "[RODBC] ERROR: Could not SQLExecDirect"因为在过程中插入语句

R - 具有来自另一个数据帧的序列的数据帧

r - 图例位置,ggplot,相对于绘图区域

将 R 数据框从长变为宽

sql - 修剪完整的字符串,而不是字符 - Redshift