我希望连接df
和p
,如我的MRE的最后一步所示。有什么想法吗?
# functions ----
asterisk <- function(y) symnum(y, c(0, .001, .01, .05, .1, 1),
c("***", "**", "*", ".", " "))
rd2 <- function(y) sprintf("%.2f", round(y, 2))
# packages ----
require(foreign)
require(nnet)
# example data from http://www.ats.ucla.edu/stat/r/dae/mlogit.htm
ml <- read.dta("http://www.ats.ucla.edu/stat/data/hsbdemo.dta")
ml$prog2 <- relevel(ml$prog, ref = "academic")
test <- multinom(prog2 ~ ses + write, data = ml)
# get coefficients and round
df <- data.frame(coefficients(test))
df <- as.data.frame(lapply(df, rd2))
row.names(df) <- row.names(coefficients(test))
df
# X.Intercept. sesmiddle seshigh write
# general 2.85 -0.53 -1.16 -0.06
# vocation 5.22 0.29 -0.98 -0.11
# get p-values
z <- summary(test)$coefficients/summary(test)$standard.errors
p <- matrix((1 - pnorm(abs(z), 0, 1)) * 2, nrow=nrow(z))
p <- as.data.frame(apply(p, c(1,2), asterisk))
# V1 V2 V3 V4
# 1 * * **
# 2 *** . ***
# concatenate df and p
# X.Intercept. sesmiddle seshigh write
# general 2.85* -0.53 -1.16* -0.06**
# vocation 5.22*** 0.29 -0.98. -0.11***
答案 0 :(得分:3)
如果您不介意用连锁数据覆盖现有的df
:
df[] <- lapply(1:ncol(df), function(col) paste0(df[,col],p[,col]) );
如果没有,您可以从df
(比如说dfp
)指定一个新变量,然后分配该变量。
使用原始df
作为此任务的起点非常有用,因为它可以避免担心设置/修复维名称。
答案 1 :(得分:2)
您可以使用mapply粘贴带星号的数字:
as.data.frame(
mapply(FUN = paste, df, p),
row.names = row.names(df)
)