Mam data.table w R i szukam do obliczenia listy na podstawie wartości wierszy za pomocą data.tables. "Próbowałem obecnie poniższy kod jako przykład
library("data.table")
dt <- data.table (data.frame(name = c("A","B","C")), num = c(10,20,30))
dt [,seq := list(replicate(5,num)),by = .I]
Jednak nie generuje listy, ale zamiast tego powtarza wartość w num
kolumna do seq
kolumna. Jak pokazano niżej
name num seq
A 10 10
B 20 20
C 30 30
Oczekiwany wynik to
name num seq
A 10 list(10, 10, 10, 10, 10)
B 20 list(20, 20, 20, 20, 20)
C 30 list(30, 30, 30, 30, 30)
Jak mam to załatwić?
Odpowiedzi:
2 dla odpowiedzi № 1Dzięki @Frank i @David odpowiedź brzmi
dt [,seq2 := list(list(replicate(5,num))), by = 1:nrow(dt)]
pierwotnie spowodować by = .I cicho nic nie robi.
Alternatywnie możesz wykonać następujące czynności, ponieważ lepiej nie wykonywać operacji wierszowych.
dt[, res := transpose(replicate(5, num, simplify = FALSE))]
W innym kierunku, Jeśli chcesz użyć dplyr
dt %>% rowwise() %>% mutate(seq = list(rep(num, 5)))