2015-10-13 27 views
0

我想用兩個表格(「CS8_2007_2009_M & F.csv」和「CourbeDeCroissance_M & F.csv」)來制定一個有點複雜的條件表達式。條件格式與R

第一個表包含大約60 000人(nocs8)具有對重(「權重」)的值和年齡(「agegestationnel」)

在第二個表,我有年齡(「GA」 )相應的第3,第5和第10百分位數(分別爲「3%」,「5%」和「10%」)。

我想根據年齡(「GA」)和相應的體重百分比(「3%」,「5%」和「10%」)對個人進行編碼(nocs8)。

這裏是我的腳本:

mydata=fread("CS8_2007_2009_M&F.csv", 
      colClasses = c(rep("character", 5), 
          rep("numeric", 5), 
          "character", 
          rep("numeric", 7), 
          rep("character", 9), "numeric")) 

setkey(mydata,nocs8) 

weight=fread("CourbeDeCroissance_M&F.csv") 
setkey(poids, GA) 

正常體重

mydata[,quant:=0] 

重量< 10%

mydata[, quant:=if(weight[GA==agegestationnel,`10%`]>mydata[[weight]]) 1, by = 1:nrow(mydata)] 

重量< 5%

mydata[, quant:=if(weight[GA==agegestationnel,`5%`]>mydata[[weight]]) 1, by = 1:nrow(mydata)] 

重量< 3%

mydata[, quant:=if(weight[GA==agegestationnel,`3%`]>mydata[[weight]]) 1, by = 1:nrow(mydata)] 

而且我得到此消息錯誤:

« Error in weight["GA" == agegestationnel, "10%"] : 
    incorrect number of dimensions 
» 

我想知道如果它是由於大尺寸我的樣本的(nocs8 = 60 000)或我所問的大量條件(23GA×3百分位數= 46)?如果是這樣,我可以做什麼?

回答

0

我終於找到了答案:

mydata <- read.csv("file1.csv", sep=";") 
weight <- read.csv("file2.csv", sep=";") 

data_merge <- merge(mydata, weight, by.x=14, by.y=1, all.x=TRUE) 

data_merge$categ = NA 
data_merge[!is.na(data_merge$weight) & !is.na(data_merge$X10.) & (data_merge$weight > data_merge$X10.), "categ"] = "Normal" 
data_merge[!is.na(data_merge$weight) & !is.na(data_merge$X10.) & (data_merge$weight < data_merge$X10.), "categ"] = "low" 
data_merge[!is.na(data_merge$poids) & !is.na(data_merge$X5.) & (data_merge$weight < data_merge$X5.), "categ"] = "very low" 
data_merge[!is.na(data_merge$poids) & !is.na(data_merge$X3.) & (data_merge$weight < data_merge$X3.), "categ"] = "Extremely low"