转换R中有效星数的data.frame中的数字

时间:2015-06-23 22:52:48

标签: r function

我正在寻找一个函数或库来转换data.frame中重要星号中的数字。

使用pander package的函数 add.significance.stars(),我可以转换有效星数中的数字。我希望构建一个函数,以便转换数字是一个data.frame中的重要星。实施例

mydata <-  data.frame("Su1"=c(1,1,0.0004),"Su2"=c(NA,1,0.03),"Su3"=c(NA,NA,0.007))
rownames(mydata) <- c("Su2","Su3","Su4")


mydata
       Su1  Su2   Su3
Su2 1.0000   NA    NA
Su3 1.0000 1.0000   NA
Su4 0.0004 0.03 0.007

使用 add.significance.stars()我想要一个像这样的表:

mydata
           Su1  Su2   Su3
    Su2 "_1.0000_"   NA    NA
    Su3 "_1.0000_" "_1.0000_"    NA
    Su4 "_0.0004_ * * *" "_0.03_ *" "_0.007_ * *"

3 个答案:

答案 0 :(得分:3)

这是一种不会丢失行名称并将其保留为数据框而不是将其转换为矩阵的方式(我发现了[] here的诀窍):

mydata[] <- sapply(mydata, add.significance.stars)
mydata
#               Su1      Su2         Su3
# Su2           _1_   _NA_NA      _NA_NA
# Su3           _1_      _1_      _NA_NA
# Su4 _4e-04_ * * * _0.03_ * _0.007_ * *

答案 1 :(得分:1)

sapply丢失了row.names,但你可以把它们放回去

mystars = sapply(mydata, add.significance.stars)
rownames(mystars) = rownames(mydata)

mystars
#     Su1             Su2        Su3          
# Su2 "_1_"           "_NA_NA"   "_NA_NA"     
# Su3 "_1_"           "_1_"      "_NA_NA"     
# Su4 "_4e-04_ * * *" "_0.03_ *" "_0.007_ * *"

答案 2 :(得分:1)

您可以使用apply通过data.frame遍历MARGIN = c(1,2)的所有单元格:

> apply(mydata, c(1, 2), add.significance.stars)
    Su1             Su2        Su3          
Su2 "_1_"           "_NA_NA"   "_NA_NA"     
Su3 "_1_"           "_1_"      "_NA_NA"     
Su4 "_4e-04_ * * *" "_0.03_ *" "_0.007_ * *"

要消除NA问题,请提交ticket on GH