您如何循环查找n列并使用条件语句?

问题描述 投票:1回答:2

我正在尝试为将在'xtable'中生成的表进行循环。

这是我一起“手动”执行的操作:

我想得到什么

library(dplyr)
X1 = c(4.70e1, 4.72e1, 4.76e1, 2.73e20)
X2 = c(4.67e1, 4.69e1, 4.77e1, 2.05e20)
col.nam = c("AIC(n)", "HQ(n)", "SC(n)", "FPE(n)")
tab.out = data.frame(col.nam, X1, X2)

n.tab = tab.out %>%
  mutate(test1 = if_else(tab.out$X1 < tab.out$X2,
                         paste0(X1,"$^{*}$"),
                         paste0(X1)),
         test2 = if_else(tab.out$X2 < tab.out$X1,
                         paste0(X2,"\\textsuperscript{*}"),
                         paste0(X2)))%>%
  select(col.nam, test1, test2)

#  col.nam      test1                        test2
#1  AIC(n)         47     46.7\\textsuperscript{*}
#2   HQ(n)       47.2     46.9\\textsuperscript{*}
#3   SC(n) 47.6$^{*}$                         47.7
#4  FPE(n)   2.73e+20 2.05e+20\\textsuperscript{*}

我想使用条件生成一个n列的循环,如下面的代码所示(我当前的丑陋且容易出错的解决方法>]:

Lo que obtuve?

tab.out = data.frame(X1, X2)
tab.out$max<-apply(tab.out, 1, max)
for(i in names(tab.out)){
  tab.out[[paste(i, 'test', sep="_")]] <- if_else(tab.out[[i]] < tab.out$max,
                                               paste0(i, "\\textsuperscript{*}"),
                                               paste0(i))
}

#        X1       X2      max                X1_test                X2_test max_test
#1 4.70e+01 4.67e+01 4.70e+01                     X1 X2\\textsuperscript{*}      max
#2 4.72e+01 4.69e+01 4.72e+01                     X1 X2\\textsuperscript{*}      max
#3 4.76e+01 4.77e+01 4.77e+01 X1\\textsuperscript{*}                     X2      max
#4 2.73e+20 2.05e+20 2.73e+20                     X1 X2\\textsuperscript{*}      max

我正在尝试对将在'xtable'中生成的表进行循环。这是我一起“手动”执行的操作:我想要获得library(dplyr)X1 = c(4.70e1,4.72e1,4.76e1,2.73e20)...

r loops stringr xtable
2个回答
2
投票

这可以直接使用矢量化操作完成,而无需使用任何“应用”功能或循环。


0
投票

我能够解决n列问题并将代码输出添加到乳胶中。

© www.soinside.com 2019 - 2024. All rights reserved.