Вернуть ранг по ID - PullRequest
       2

Вернуть ранг по ID

0 голосов
/ 17 января 2019

Над списком фрейма данных, содержащего два столбца Год и Значение. Я отсортировал значения в порядке возрастания по годам. Теперь я хотел бы вернуть положение каждого значения в его годовом ряду, чтобы построить их и сравнить эти ранжированные годовые ряды среди фреймов данных.

Вот пример набора данных

#data
df1 <- data.frame(Year = c(1860, 1860, 1860, 1861, 1861, 1862, 1862, 1862), Value = c(487, 456, 123, 159, 123, 789, 456, 321)) 
df2 <- data.frame(Year = c(1916, 1916, 1917, 1917, 1917, 1918, 1918, 1918, 1919, 1919), Value = c(123, 456, 487, 123, 159, 321, 789, 456, 487, 154)) 
l <- list(df1, df2)

Шаг 1: я упорядочил значения по годам, используя простую order() в lapply функцию

sort.df <- lapply(l, function(x) {
x[order(x$"Year", x$"Value"), ]
})

Шаг 2: Я думал cbind() последовательность числовых значений по году, используя цикл с

for (row in 1:nrow(df)) {
require (dplyr)
require (purr)
df %>% group_by(df$"Year") %>%
seq(1, (as.numeric(nrow(df[which(df$Year == i), ]))), 1)
}

Я просто не в состоянии интегрировать это в lapply() функцию ... Но она работает в течение определенного года данного df.

Есть ли способ сделать это?

#result
df1.1 <- data.frame(Year = c(1860, 1860, 1860, 1861, 1861, 1862, 1862, 1862), Value = c(123, 456, 487, 123, 159, 321, 456, 789), Rank = c(1,2,3,1,2,1,2,3)) 
df2.1 <- data.frame(Year = c(1916, 1916, 1917, 1917, 1917, 1918, 1918, 1918, 1919, 1919), Value = c(123, 456, 123, 159, 487, 321, 456, 789, 154, 487), Rank = c(1,2,1,2,3,1,2,3,1,2)) 
l.1 <- list(df1.1, df2.1)

1 Ответ

0 голосов
/ 17 января 2019

Один из подходов может быть:

library(tidyverse)

 l %>% 
   map(. %>%
   group_by(Year) %>%
   mutate(Rank = rank(Value)))

[[1]]
# A tibble: 8 x 3
# Groups:   Year [3]
   Year Value  Rank
  <dbl> <dbl> <dbl>
1  1860   487     3
2  1860   456     2
3  1860   123     1
4  1861   159     2
5  1861   123     1
6  1862   789     3
7  1862   456     2
8  1862   321     1

[[2]]
# A tibble: 10 x 3
# Groups:   Year [4]
    Year Value  Rank
   <dbl> <dbl> <dbl>
 1  1916   123     1
 2  1916   456     2
 3  1917   487     3
 4  1917   123     1
 5  1917   159     2
 6  1918   321     1
 7  1918   789     3
 8  1918   456     2
 9  1919   487     2
10  1919   154     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...