/ / Jak połączyć i podsumować wartości wierszy R data.table z różnych tabel o różnych rozmiarach? - r, data.tabela

Jak połączyć i podsumować wartości wierszy R data.table z różnych tabel o różnych rozmiarach? - r, data.table

Mam tabelę punktów (x,y) i chciałbym utworzyć drugą tabelę podsumowującą te punkty.

Chciałbym, aby każdy wiersz w tabeli podsumowującejpokaż sumę wszystkich y, gdzie x jest większe niż sekwencja progów. Ale mam problem z ustaleniem, jak połączyć wartość progową wiersza z sumą wewnętrzną.

Dotarłem tak daleko:

samples <- data.table(x=seq(1,100,1), y=seq(1,100,1))
thresholds = seq(10,100,10)
thresholdedSums <- data.table(xThreshold=thresholds, ySumWhereXGreaterThanThreshold=sum(samples[x > xThreshold, y]))

Error in eval(expr, envir, enclos) : object "xThreshold" not found

Jak miałbym to osiągnąć, czy jest inny sposób na zrobienie tego typu rzeczy?

Aby wyjaśnić pożądany wynik:

thresholdedSums =
[
(row 1) threshold = 10, ySumWhereXGreaterThanThreshold = sum of all y values in samples[] where x > 10,
(row 2) threshold = 20, ySumWhereXGreaterThanThreshold = sum of all y values in samples[] where x > 20,
... etc ...
]

Odpowiedzi:

1 dla odpowiedzi № 1

Wynik można podać za pomocą następującego kodu. To rozwiązanie nie jest całkowicie oparte na data.table, ale działa solidnie.

thresholdedSums <- data.table(
thres = thresholds,
Sum = sapply(thresholds, function(thres) samples[x > thres, sum(y)])
)

#    thres  Sum
# 1:    10 4995
# 2:    20 4840
# 3:    30 4585
# 4:    40 4230
# 5:    50 3775
# 6:    60 3220
# 7:    70 2565
# 8:    80 1810
# 9:    90  955
# 10:   100   0

Dodatkowe wyjaśnienie: sapply(thresholds, function(thres) samples[x > thres, sum(y)]) zwraca wektor o tej samej długości co thresholds. Możesz to przeczytać jako: Dla każdego elementu w thresholds wykonać funkcję function(thres) samples[x > thres, sum(y)] i zwróć wynik jako vector. W porównaniu do for-loop ta procedura jest zwykle lepsza pod względem wydajności i łatwiejsza do odczytania.