我在做大資料分析,我想把每個人的身體活動加起來。
pha_04z1
是上周劇烈體育活動的天數,pha_05z1
和pha_06z1
是小時和分鐘。pha_07z1
是一周中適度體育活動的天數,pha_08z1
并且pha_09z1
是小時和分鐘。雖然它不在原始資料中,但我正在嘗試創建名為ph_a0100
, ph_0200
, ph_0300
,ph_0400
的變數ph_0500
來獲得最終的身體活動量。中度或更多的身體活動被定義為“在過去一周內,每天 20 分鐘或更多,每周 3 天或更多”。SAS 代碼如下。
if 0<=pha_05z1 <=24 and pha_06z1=. then do;
ph_a0100=pha_05z1*60;
end;
if a<=pha_05z1<=24 and 0<=pha_06z1 <=59 then do;
ph_a0100=(pha_05z1*60) pha_06z1;
end;
if pha_05z1=. and 0<=pha_06z1<=59 then do;
ph_a0100=pha_06z1;
end;
if pha_04z1 in (0:2) the ph_a0200=0;
else if pha_04z1 in (3:7) then do;
if ph_a0100=. then ph_a0200=.;
else if 0<=ph_a0100<=19 then ph_a0200=0;
else if 20<=ph_a0100 then ph_a0200=1;
end;
-----
(Abstinence from vigorous physical activity)
-----
if ph_a0200=1 or ph_a0400=1 then ph_a0500=1;
else if ph_a0200=0 and ph_a0400=0 then ph_a0500=0;
下面是我用 R 代碼做的。
if (pha_05z1<=24 & pha_05z1>=0 & pha_06z1==88)
{
ch2020_$ph_a0100 <- pha_05z1*60
}
if (pha_05z1<=24 & pha_05z1>=0 & pha_06z1<=59 & pha_06z1>=0)
{
ch2020_$ph_a0100 <- pha_05z1*60 pha_06z1
}
if (pha_05z1==88 & pha_06z1<=59 & pha_06z1>=0)
{
ch2020_$ph_a0100 <- pha_06z1
}
ch2020_$ph_a0200 <-
ifelse(pha_04z1%in%c(0,1,2),0,
ifelse(pha_04z1>=3 & ch2020_$ph_a0100==NA),NA,
ifelse(ch2020_$ph_a0100<=19 & ch2020_$ph_a0100 >=0),0,1)
此代碼不起作用。我該如何解決這個問題?先感謝您。請幫忙。
uj5u.com熱心網友回復:
缺少資料,我會扔掉一些代碼,也許它會作業。
意識到在 SAS 中,您可以對
if
陳述句進行有條件的重新分配,而在 R 中,<-
除非 LHS 是索引參考(使用[
or$
),否則運算子會覆寫所有內容。(我不太了解 SAS,所以我在解釋你的代碼時可能會出錯。)不要
&
在if
陳述句中使用 single- ,除非它包含在邏輯聚合器中,例如any
,all
等。雖然它目前可以作業,但 Rif
運算子的前提是它的條件必須長度正好為 1,其他任何內容都是錯誤的(并且,在 R-4.2.0 中,將導致錯誤,而不僅僅是警告)。我推斷您對
pha_06z1
等的參考實際上是ch2020_
. 缺乏資料使得這很難確定。
三種方式:
嵌套
ifelse
:ch2020_$ph_a0100 <- ifelse(ch2020_$pha_05z1<=24 & ch2020_$pha_05z1>=0 & ch2020_$pha_06z1==88, ch2020_$pha_05z1*60, ifelse(ch2020_$pha_05z1<=24 & ch2020_$pha_05z1>=0 & ch2020_$pha_06z1<=59 & ch2020_$pha_06z1>=0, ch2020_$pha_05z1*60 ch2020_$pha_06z1, ifelse(ch2020_$pha_05z1==88 & ch2020_$pha_06z1<=59 & ch2020_$pha_06z1>=0, ch2020_$pha_06z1, ch2020_$ph_a0100)))
嵌套
ifelse
,但將其包裝起來with
以使其更具可讀性:ch2020_$ph_a0100 <- with(ch2020_, ifelse(pha_05z1<=24 & pha_05z1>=0 & pha_06z1==88, pha_05z1*60, ifelse(pha_05z1<=24 & pha_05z1>=0 & pha_06z1<=59 & pha_06z1>=0, pha_05z1*60 pha_06z1, ifelse(pha_05z1==88 & pha_06z1<=59 & pha_06z1>=0, pha_06z1, ph_a0100))) )
分配一個默認值,然后迭代地替換子索引部分。
# ch2020_$ph_a0100 is predefined with some value or just NA ind <- with(ch2020_, pha_05z1<=24 & pha_05z1>=0 & pha_06z1==88) ch2020_$ph_a0100[ind] <- ch2020_$pha_05z1[ind] * 60 ind <- with(ch2020_, pha_05z1<=24 & pha_05z1>=0 & pha_06z1<=59 & pha_06z1>=0) ch2020_$ph_a0100[ind] <- with(ch2020_, pha_05z1[ind]*60 pha_06z1[ind]) ind <- with(ch2020_, pha_05z1==88 & pha_06z1<=59 & pha_06z1>=0) ch2020_$ph_a0100[ind] <- ch2020_$pha_06z1
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/465439.html