Это может быть вопрос о задаче/вопрос управления данными или их комбинация. Я относительно новичок в R, и я широко настраиваю, как управлять данными в R vs. Stata (в качестве примера). Я читал подробно, но не нашел хорошего примера того, как (1) извлекать векторы из блока данных по группам; (2) применять функцию попарно против всех комбинаций этих векторов; и (3) выводят результаты в виде матрицы, поэтому я прошу вас, как это сделать. Я упростил все имена переменных/данные в примере ниже:Как использовать семейство apply в
У меня есть dataframe ДФ структурирован следующим образом:
id score1 score2 extravar1 extravar2 .....
1 10 9 a 1.4345124
1 9 7 b 1.1133529
1 5 5 c -0.1712851
2 4 4 d -0.4924446
2 3 2 junk -0.8136040
2 6 6 junk 0.14987444
3 5 6 junk 0.14331245
etc
Мне нужно создать ковариационную матрицу ID score1 подмножеств и ID score2 подмножеств. Другими словами, я хотел бы выполнить следующие расчеты для обоих score1 и score2:
cov(vector of df$score1 for id 1 only,df$score1 for id 1 only)
cov(vector of df$score1 for id 1 only,df$score1 for id 2 only)
cov(vector of df$score1 for id 1 only,df$score1 for id 3 only)
.
.
.
cov(vector of df$score1 for id 1 only,df$score1 for id 288 only)
cov(vector of df$score1 for id 1 only,df$score1 for id 289 only)
cov(vector of df$score1 for id 2 only,df$score1 for id 1 only)
cov(vector of df$score1 for id 2 only,df$score1 for id 2 only)
.
.
.
cov(vector of df$score1 for id 289 only,df$score1 for id 288 only)
cov(vector of df$score1 for id 289 only,df$score1 for id 289 only)
и хотел бы данные для вывода на два (один носовой score1, один для score2) списков, dataframes или матриц который выглядит как (где s1-1 является score1 вектор ID = 1):
1 2 3 ... 288 289
1 cov(s1-1,s1-1) cov(s1-1,s1-2) cov(s1-1,s1-3) cov(s1-1,s1-288) cov(s1-1,s1-289)
2 cov(s1-2,s1-1) cov(s1-2,s1-2) cov(s1-2,s1-3) cov(s1-2,s1-288) cov(s1-2,s1-289)
3 cov(s1-3,s1-1) cov(s1-3,s1-2) cov(s1-3,s1-3) cov(s1-3,s1-288) cov(s1-3,s1-289)
.
.
.
288 cov(s1-288,s1-1) cov(s1-288,s1-2) cov(s1-288,s1-3) cov(s1-288,s1-288) cov(s1-288,s1-289)
289 cov(s1-289,s1-1) cov(s1-289,s1-2) cov(s1-289,s1-3) cov(s1-289,s1-288) cov(s1-289,s1-289)
Моя проблема заключается в том, что я бегу в проблемы (1) манипулируют данные так, что он находится в правильном формате для такого анализ и (2) решение о том, какая из применимых функций будет наиболее подходящей для использования (возможно, mapply?). В настоящее время я использую раскол, чтобы разделить данные на группы, но я потерял, как манипулировать его оттуда:
df.scores <- df[,c("id","score1","score2")]
databy.id <- split(df.scores,df.scores$id)
что дает список я не 100% ясно, о том, как манипулировать применить. голова (databy.id) выглядит примерно так:
$`1`
id score1 score2
1 1 10 9
2 1 9 7
3 1 5 5
4 1 4 4
5 1 3 2
...
$`2`
id score1 score2
1 2 8 3
2 2 9 2
3 2 10 1
4 2 9 3
5 2 4 9
...
$`3`
id score1 score2
1 3 8 7
2 3 3 4
3 3 2 3
4 3 4 6
5 3 6 1
...
я могу (и есть) решили эту проблему с петлями, но предпочел бы не делать, а я в следующий раз необходимо повторно рандомизации оценки и моделирования/магазин много таких матриц (который чрезмерно длится с помощью петель). Должен ли я использовать ddply, mapply или некоторые другие функции? Есть ли у вас какие-либо предложения о том, как действовать?
Это не похоже на ваш вопрос Там нет никакого упоминания о «Impact» в. вопрос. –