У меня есть фрейм данных df1
с четырьмя переменными.Один относится к солнечному свету, второй относится к свету фазы луны (свет, обусловленный фазой луны), третий относится к свету положения луны (свет от луны зависит от того, находится он в небе или нет) ичетвертый относится к ясности неба (противоположно облачности).
Я называю их SL
, MPhL
, MPL
и SC
соответственно.Я хочу создать новый столбец, называемый «глобальный свет», который в течение дня зависит только от SL
, а ночью зависит от трех других столбцов («MPhL», «MPL» и «SC»).Я хочу, чтобы ночью (когда SL == 0
) свет в определенной области был равен произведению столбцов «MPhL», «MPL» и «SC».Если какой-либо из них равен 0, то ночью свет также будет равен 0.
Поскольку я работаю с матрицей из сотен тысяч строк, какой будет лучший способ сделать это?В качестве примера того, что у меня есть:
SL<- c(0.82,0.00,0.24,0.00,0.98,0.24,0.00,0.00)
MPhL<- c(0.95,0.85,0.65,0.35,0.15,0.00,0.87,0.74)
MPL<- c(0.00,0.50,0.10,0.89,0.33,0.58,0.00,0.46)
SC<- c(0.00,0.50,0.10,0.89,0.33,0.58,0.00,0.46)
df<-data.frame(SL,MPhL,MPL,SC)
df
SL MPhL MPL SC
1 0.82 0.95 0.00 0.00
2 0.00 0.85 0.50 0.50
3 0.24 0.65 0.10 0.10
4 0.00 0.35 0.89 0.89
5 0.98 0.15 0.33 0.33
6 0.24 0.00 0.58 0.58
7 0.00 0.87 0.00 0.00
8 0.00 0.74 0.46 0.46
То, что я хотел бы получить, это:
df
SL MPhL MPL SC GL
1 0.82 0.95 0.00 0.00 0.82 # When "SL">0, GL= SL
2 0.00 0.85 0.50 0.50 0.21 # When "SL" is 0, GL = MPhL*MPL*SC
3 0.24 0.65 0.10 0.10 0.24
4 0.00 0.35 0.89 0.89 0.28
5 0.98 0.15 0.33 0.33 0.98
6 0.24 0.00 0.58 0.58 0.24
7 0.00 0.87 0.00 0.00 0.00
8 0.00 0.74 0.46 0.46 0.16