Воздействуйте на пар строк кадра данных

У меня есть кадр данных в R, и я хотел бы выполнить вычисление на всех парах строк. Существует ли более простой способ сделать это, чем использование вложенного для цикла?

Для создания этого бетона рассмотрите кадр данных с десятью строками, и я хочу вычислить различие очков между всем (45) возможные пары.

> data.frame(ID=1:10,Score=4*10:1)
   ID Score
1   1    40
2   2    36
3   3    32
4   4    28
5   5    24
6   6    20
7   7    16
8   8    12
9   9     8
10 10     4

Я знаю, что мог сделать это вычисление с вложенным для цикла, но являюсь там лучшим (больше R-выхода) способ сделать это?

6
задан Lorin Hochstein 11 April 2010 в 03:05
поделиться

4 ответа

Здесь другое решение, использующее combn :

df <- data.frame(ID=1:10,Score=4*10:1)
cm <- combn(df$ID,2)
delta <- df$Score[cm[1,]]-df$Score[cm[2,]]

или более прямо

df <- data.frame(ID=1:10,Score=4*10:1)
delta <- combn(df$ID,2,function(x) df$Score[x[1]]-df$Score[x[2]])
5
ответ дан 8 December 2019 в 12:58
поделиться
colmx = matrix(rep(df[,2], 10), ncol=10, byrow=F)
rowmx = matrix(rep(df[,2], 10), ncol=10, byrow=T)
delta = colmx - rowmx
3
ответ дан 8 December 2019 в 12:58
поделиться

dist () - ваш друг.

dist(df$Score)

Вы можете представить это в виде матрицы:

as.matrix( dist(df$Score) )
3
ответ дан 8 December 2019 в 12:58
поделиться

Для вычисления разницы, возможно, вы можете использовать

outer(df$Score,df$Score,"-")
7
ответ дан 8 December 2019 в 12:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: