使用colSums(DF)创建具有特定值的向量

时间:2017-01-30 15:11:04

标签: r vector

我有以下DF:

> str(fngr_rain)
'data.frame':   80 obs. of  9 variables:
 $ CRP: int  0 0 0 0 0 0 0 0 0 0 ...
 $ CRO: int  0 0 0 0 0 0 0 0 0 0 ...
 $ EPR: int  1 1 0 0 1 1 1 1 1 0 ...
 $ EPO: int  1 1 1 1 1 1 1 1 1 1 ...
 $ ARB: int  0 0 0 0 0 0 0 0 0 0 ...
 $ OPP: int  1 0 1 1 1 1 1 1 0 1 ...
 $ AAT: int  0 0 0 0 0 0 0 0 0 0 ...
 $ LCA: int  1 0 0 0 0 0 0 0 0 0 ...
 $ ATN: int  0 0 0 0 0 0 0 0 0 0 ...

我想创建一个函数,该函数生成此DF的colSums的向量。问题是:我需要向量只有colSums的值大于4.所以,而不是:

> colSums(fngr_rain)
CRP CRO EPR EPO ARB OPP AAT LCA ATN 
  3   0  48  80   3  51   1  25   0

我想要以下矢量:

> vector1 <- c("EPR" = 48, "EPO" = 80, "OPP" = 51, "LCA" = 25)
> vector1
EPR EPO OPP LCA 
 48  80  51  25 

我正在尝试这样的事情:

> my_fun = function(x) {
+     sapply(as.vector(colSums(x)), function(x){
+         if(x >= 4) assign("my_vec", x, envir = .GlobalEnv)
+         }
+     )
+ }
> my_fun(fngr_rain)
[[1]]
[1] 3

[[2]]
[1] 0

[[3]]
NULL

[[4]]
NULL

[[5]]
[1] 3

[[6]]
NULL

[[7]]
[1] 1

[[8]]
NULL

[[9]]
[1] 0

编辑: 它返回一个带向量的列表。然后我可以使用unlist()获取向量(如注释中所示)

unlist(my_fun(fngr_rain))
[1] 3 0 3 1 0

但是,我仍然希望将矢量存储在一个对象中。我尝试在我的功能中这样做,但是&#34; my_vec&#34;我创建的对象不会返回向量:

> my_vec
[1] 0

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

也许

colSums(fngr_rain)[colSums(fngr_rain)>4]