Как составить таблицу частоты числа, умноженного на число, поднятое до 3 в R - PullRequest
0 голосов
/ 11 ноября 2018

Имея следующий список, я бы хотел, чтобы результат частоты умножался на значение индекса, повышенное до 3. Как я могу это сделать?

data<-c(1,1,2,2,3,34,65,78,65,3)

table(data)

data

 1  2  3 34 65 78 

 2  2  2 1  2  1 

Ожидаемое:

 1  2  3 34 65 78 

 2  8*2  27*2 39304*1  274625*2  474552*1 

Спасибо

Ответы [ 3 ]

0 голосов
/ 11 ноября 2018

Вы могли бы рассмотреть tapply:

res <- tapply(data, data, function(x) (x[1]^3) * length(x))

#1      2      3     34     65     78 
#2     16     54  39304 549250 474552 
0 голосов
/ 11 ноября 2018

Заметьте так же красиво, как и другие ответы, но многоэтапное решение.

Данные:

data<-c(1,1,2,2,3,34,65,78,65,3)
data <- as.data.frame(table(data))

Решить задачу:

data$data <- as.numeric(as.character(data$data))
data$powers <- data$data**3
data$final <- data$Freq * data$powers

Результат:

  data Freq powers  final
1    1    2      1      2
2    2    2      8     16
3    3    2     27     54
4   34    1  39304  39304
5   65    2 274625 549250
6   78    1 474552 474552
0 голосов
/ 11 ноября 2018
with(rle(sort(data)), lengths*values^3)
#[1]      2     16     54  39304 549250 474552

OR

x = table(data)
x*as.numeric(names(x))^3
#data
#1      2      3     34     65     78 
#2     16     54  39304 549250 474552 
...