Умножьте значения столбца в одном data.frame на столбец в другом data.frame для условия в R - PullRequest
0 голосов
/ 09 марта 2012

У меня есть два фрейма данных в r, которые я пытаюсь объединить на основе значений в столбце для каждого.

df1=data.frame(comp=c("comp1", "comp2", "comp3","comp1"),
 state1=c(1,0,0,1),
 state2=c(1,1,0,1),
 state3=c(0,1,1,0),
 state4=c(0,0,1,0),year=c(1,1,1,2))

   comp state1 state2 state3 state4 year
1 comp1      1      1      0      0    1
2 comp2      0      1      1      0    1
3 comp3      0      0      1      1    1
4 comp1      1      1      0      0    2

df2=data.frame(state=c("state1","state2", "state3", "state4", 
                       "state1","state2", "state3", "state4"), 
 var1=c(1,0,0,1,0,0,1,1), 
 var2=c(0,1,0,0,0,1,1,0), 
 year=c(1,1,1,1,2,2,2,2))

df2

    state var1 var2 year
1 state1    1    0    1
2 state2    0    1    1
3 state3    0    0    1
4 state4    1    0    1
5 state1    0    1    2
6 state2    0    1    2
7 state3    1    1    2
8 state4    1    0    2

Я бы хотел добавить к df1 столбцы, которые являются var1, var2, что является средним значением всех состояний для этой композиции.

так, var1 для comp1 должно быть 1 * 1 + 1 * 0 + 0 * 0 + 0 * 1 / (1 + 1) или состояние * var / sum (состояние для comp) по годам.

df3 будет выглядеть так:

         state1 state2 state3 state4 year  var1  var2
    1 comp1  1      1      0      0     1   0.5   0.5
    2 comp2  0      1      1      0     1   0.0   0.5
    3 comp3  0      0      1      1     1   0.5   0.0
    4 comp1  1      1      0      0     2   0.5   1.0

Возможно ли это? Я пытался использовать ddply со средним значением var1, суммируя по годам и годам, но это не работает. Я получаю более одной строки на комп в год.

Заранее спасибо. Это наиболее похоже на мою проблему, но оно не показывает условия во втором наборе данных. Умножать различные подмножества фрейма данных на разные векторы

Пожалуйста, сообщите.

1 Ответ

1 голос
/ 10 марта 2012

Я надеюсь, что, разбив это на сегменты, вы сможете выяснить, почему мои результаты выглядят не так, как вы предсказываете:

 df3 <- matrix(NA, ncol=2, nrow=nrow(df1))
 for (i in seq(nrow(df1))) {
     df3[i, 1] <- sum(df2[ df2$year==df1$year[i], "var1"] * df1[i, 2:5])
     df3[i, 2] <- sum(df2[ df2$year==df1$year[i], "var2"] * df1[i, 2:5])
 }
 m4<-df3/rowSums(df1[2:5])
 cbind(df1, m4)
#---------------
   comp state1 state2 state3 state4 year   1         2
1 comp1      1      1      0      0    1 0.5 0.5000000
2 comp2      0      1      1      0    1 0.0 0.3333333
3 comp3      0      0      1      1    1 0.5 0.0000000
4 comp1      1      1      0      0    2 0.0 0.3333333

Кажется, что они совпадают нормально на записях "var1", и я надеюсь, что выпросто добавила некоторые догадки для "var2".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...