我正在寻找一个函数或库来转换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_ * *"
答案 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。