跨行R的条件计算

时间:2016-03-09 14:15:32

标签: r dplyr

首先,我是R的新手,正在从SAS转换。我有一个1000行乘24列的数据集,其中列是不同的处理。我想计算观察符合下面列出的数据集行的标准的次数。

            Gene        A       B        C         D
1         AARS_3       NA      NA 4.168365        NA
2 AASDHPPT_21936       NA      NA       NA -3.221287
3     AATF_26432       NA      NA       NA        NA
4       ABCC2_22 4.501518 3.17992       NA        NA
5    ABCC2_26620       NA      NA       NA        NA

我试图创建计数

的列向量
  • 1)NAs数量
  • 2)列数< 0
  • 3)列数> 0

然后我会使用cbind将这些添加到我的大数据集

我解决了第一个:

NA.Count <- (apply(b01,MARGIN=1,FUN=function(x) length(x[is.na(x)])))

我试图修改它来计算评估!is.na然后用这个来计算值小于零的次数:

lt0 <- (apply(b01,MARGIN=1,FUN=function(x) ifelse(x[!is.na(x)],count(x[x<0]))))

根本不起作用。

我尝试了十几种方法让dplyr mutate与之合作并且没有成功。

我想要的是下面的最后两列;如果你有一个更清洁版的NA.Count,我也会非常感激。

             Gene        A       B       C          D   NA.Count   lt0   gt0
 1         AARS_3       NA      NA 4.168365        NA     3         0      1
 2 AASDHPPT_21936       NA      NA       NA -3.221287     3         1      0
 3     AATF_26432       NA      NA       NA        NA     4         0      0
 4       ABCC2_22 4.501518 3.17992       NA        NA     2         0      2
 5    ABCC2_26620       NA      NA       NA        NA     4         0      0

1 个答案:

答案 0 :(得分:1)

这是一种利用RUE中的TRUE等于1的事实的方法。

# test data frame
lil_df <- data.frame(Gene = c("AAR3", "ABCDE"),
                 A = c(NA, 3),
                 B = c(2, NA),
                 C = c(-1, -2),
                 D = c(NA, NA))

# is.na
NA.count <- rowSums(is.na(lil_df[,-1]))

# less than zero
lt0 <- rowSums(lil_df[,-1]<0, na.rm = TRUE)

# more that zero
mt0 <- rowSums(lil_df[,-1]>0, na.rm = TRUE)

# cbind to data frame
larger_df <- cbind(lil_df, NA.count, lt0, mt0 )

larger_df
  Gene  A  B  C  D NA.count lt0 mt0
1  AAR3 NA  2 -1 NA        2   1   1
2 ABCDE  3 NA -2 NA        2   1   1