2015-09-10 104 views
1

我正在使用R和RStudio。 我有以下的數據幀:根據特定條件在數據框中填充一列

ID TIME DV GpH SIpH GTT SITT 
1  0  0 1.4 7.1 1.8 3.5 
1  1  0.5 1.4 7.1 1.8 3.5 
1  2  2 1.4 7.1 1.8 3.5 
1  3  5 1.4 7.1 1.8 3.5 
2  0  0 1.5 7.5 0.7 2.5 
2  1  0.5 1.5 7.5 0.7 2.5 
2  2  2 1.5 7.5 0.7 2.5 
2  3  5 1.5 7.5 0.7 2.5 

欲一個pH列添加到所述數據幀,使得:

1)如果TIME小於GTT對於每個受試者ID然後pHGpH爲那個題目。 2)如果TIME大於GTT並且小於該主體的GTT+SITT然後pH = SIpH的總和。

3)如果TIME大於每個主題的GTT+SITT的總和,則pH=6

我怎麼可能以快速的方式在R中實現這個?

+2

什麼你嘗試這麼遠嗎? –

+0

我嘗試過使用IF語句,但仍然無法工作,因爲'GTT'和'SITT'對於每個主題'ID'都是不同的。 – Amer

回答

2

你可以試試這個,假設你的數據幀存儲爲df1

df1$pH <- with(df1, (TIME < GTT) * GpH + (TIME > GTT & TIME < (GTT + SITT)) * SIpH + (TIME > (GTT + SITT)) * 6) 
#> df1 
# ID TIME DV GpH SIpH GTT SITT pH 
#1 1 0 0.0 1.4 7.1 1.8 3.5 1.4 
#2 1 1 0.5 1.4 7.1 1.8 3.5 1.4 
#3 1 2 2.0 1.4 7.1 1.8 3.5 7.1 
#4 1 3 5.0 1.4 7.1 1.8 3.5 7.1 
#5 2 0 0.0 1.5 7.5 0.7 2.5 1.5 
#6 2 1 0.5 1.5 7.5 0.7 2.5 7.5 
#7 2 2 2.0 1.5 7.5 0.7 2.5 7.5 
#8 2 3 5.0 1.5 7.5 0.7 2.5 7.5 
+1

工作得很好。謝謝! – Amer

+0

不客氣。很高興我能幫上忙。 – RHertel

1

你可以嘗試的ifelse嵌套:

「創建」 的數據:

data <- read.csv(head=TRUE, text = 
"ID,TIME,DV,GpH,SIpH,GTT,SITT 
1,0,0,1.4,7.1,1.8,3.5 
1,1,0.5,1.4,7.1,1.8,3.5 
1,2,2,1.4,7.1,1.8,3.5 
1,3,5,1.4,7.1,1.8,3.5 
2,0,0,1.5,7.5,0.7,2.5 
2,1,0.5,1.5,7.5,0.7,2.5 
2,2,2,1.5,7.5,0.7,2.5 
2,3,5,1.5,7.5,0.7,2.5") 

添加ph

data$ph <- ifelse(
    data$TIME < data$GTT, 
     data$GpH, 
     ifelse (
     data$TIME > data$GTT & data$TIME < data$GTT + data$SITT, 
      data$SIpH, 
      6 
    ) 
) 

打印結果

data 

    ID TIME DV GpH SIpH GTT SITT ph 
1 1 0 0.0 1.4 7.1 1.8 3.5 1.4 
2 1 1 0.5 1.4 7.1 1.8 3.5 1.4 
3 1 2 2.0 1.4 7.1 1.8 3.5 7.1 
4 1 3 5.0 1.4 7.1 1.8 3.5 7.1 
5 2 0 0.0 1.5 7.5 0.7 2.5 1.5 
6 2 1 0.5 1.5 7.5 0.7 2.5 7.5 
7 2 2 2.0 1.5 7.5 0.7 2.5 7.5 
8 2 3 5.0 1.5 7.5 0.7 2.5 7.5 
相關問題