通过多个数据集创建循环

时间:2013-04-25 23:05:25

标签: r matrix dataframe

对于兄弟数据,我试图创建一个循环,通过sib10运行sib1。我想在每个栏目上前进如果值为174,我想对列进行求和并将其设置为1.这种方式最好运行我的逻辑回归代码。我的问题是每个sib1-sib10都是数据集而不是单个列。我举了一个sib1的例子 我希望这是有道理的,我一直在努力设置这种类型的循环。

代码:

   sibling=data.table(cbind((data[,'b16aa']),(data[,'b16ba']),(data[,'b16ca']),(data[,'b16da']),(data[,'b16ea']),(data[,'b16fa']),(data[,'b16ga']),(data[,'b16ha']),(data[,'b16ia']),(data[,'b16ja'])))  
   sib1=sibling[sibling$V1==174,]
   sib2=sibling[sibling$V2==174,]
   sib3=sibling[sibling$V3==174,]
   sib4=sibling[sibling$V4==174,]
   sib5=sibling[sibling$V5==174,]                          
   sib6=sibling[sibling$V6==174,]                        
   sib7=sibling[sibling$V7==174,]
   sib8=sibling[sibling$V8==174,]
   sib9=sibling[sibling$V9==174,]
   sib10=sibling[sibling$V10==174,]

SIB1:

       V1  V2  V3  V4  V5  V6 V7  V8 V9 V10
    1: 174 174  NA  NA  NA  NA NA  NA NA  NA
    2: 174  NA  NA  NA  NA  NA NA  NA NA  NA
    3: 174  NA  NA  NA  NA  NA NA  NA NA  NA
    4: 174  NA  NA  NA  NA  NA NA  NA NA  NA
    5: 174  NA  NA  NA  NA  NA NA  NA NA  NA
    6: 174  NA  NA  NA  NA  NA NA  NA NA  NA
    7: 174  NA  NA 174  NA 174 NA 174 NA  NA
    8: 174  NA  NA  NA  NA  NA NA  NA NA  NA
    9: 174  NA  NA  NA  NA  NA NA  NA NA  NA
   10: 174  NA  NA  NA  NA  NA NA  NA NA  NA

1 个答案:

答案 0 :(得分:0)

你可以做这样的事情

# Your data as it appears in the question
df <- structure(list(V1 = c(174L, 174L, 174L, 174L, 174L, 174L, 174L, 
174L, 174L, 174L), V2 = c(174L, NA, NA, NA, NA, NA, NA, NA, NA, 
NA), V3 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), V4 = c(NA, 
NA, NA, NA, NA, NA, 174L, NA, NA, NA), V5 = c(NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA), V6 = c(NA, NA, NA, NA, NA, NA, 174L, 
NA, NA, NA), V7 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 
    V8 = c(NA, NA, NA, NA, NA, NA, 174L, NA, NA, NA), V9 = c(NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA), V10 = c(NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA)), .Names = c("V1", "V2", "V3", 
"V4", "V5", "V6", "V7", "V8", "V9", "V10"), class = "data.frame", row.names = c("1:", 
"2:", "3:", "4:", "5:", "6:", "7:", "8:", "9:", "10:"))

df
#    V1  V2 V3  V4 V5  V6 V7  V8 V9 V10
#1:  174 174 NA  NA NA  NA NA  NA NA  NA
#2:  174  NA NA  NA NA  NA NA  NA NA  NA
#3:  174  NA NA  NA NA  NA NA  NA NA  NA
#4:  174  NA NA  NA NA  NA NA  NA NA  NA
#5:  174  NA NA  NA NA  NA NA  NA NA  NA
#6:  174  NA NA  NA NA  NA NA  NA NA  NA
#7:  174  NA NA 174 NA 174 NA 174 NA  NA
#8:  174  NA NA  NA NA  NA NA  NA NA  NA
#9:  174  NA NA  NA NA  NA NA  NA NA  NA
#10: 174  NA NA  NA NA  NA NA  NA NA  NA


m <- as.matrix(df)
m[m==174] <- 1
colSums(m , na.rm = TRUE )
 V1  V2  V3  V4  V5  V6  V7  V8  V9 V10 
 10   1   0   1   0   1   0   1   0   0 

也许您想将其作为另一列添加到df

df$ColTot <- colSums(m , na.rm = TRUE )
df
#    V1  V2 V3  V4 V5  V6 V7  V8 V9 V10 ColTot
#1:  174 174 NA  NA NA  NA NA  NA NA  NA     10
#2:  174  NA NA  NA NA  NA NA  NA NA  NA      1
#3:  174  NA NA  NA NA  NA NA  NA NA  NA      0
#4:  174  NA NA  NA NA  NA NA  NA NA  NA      1
#5:  174  NA NA  NA NA  NA NA  NA NA  NA      0
#6:  174  NA NA  NA NA  NA NA  NA NA  NA      1
#7:  174  NA NA 174 NA 174 NA 174 NA  NA      0
#8:  174  NA NA  NA NA  NA NA  NA NA  NA      1
#9:  174  NA NA  NA NA  NA NA  NA NA  NA      0
#10: 174  NA NA  NA NA  NA NA  NA NA  NA      0