【问题标题】:How to remove quotes in string values in displaying a matrix?如何在显示矩阵时删除字符串值中的引号?
【发布时间】:2015-03-01 18:36:57
【问题描述】:

可重现的例子:

adfcstable <- function(d, max = 5) {
d <- as.data.frame(d)
LevelADFtable <- matrix(, nrow = dim(d)[[2]]*3, ncol = 9) #18x9
FirstDiffADFtable <- matrix(, nrow = dim(d)[[2]]*3, ncol = 8)  #18x8
Result <- matrix(, nrow = dim(d)[[2]]*3, ncol = 1)   # 18x1
ADFtable <- cbind(LevelADFtable, FirstDiffADFtable, Result) # 18 x 18
colnames(ADFtable) <- c("var","type","levelt","Pc","c","Pt","t","prob","omlo","type","1stDifft","Pc","c","Pt","t","prob","omlo","result")

for (i in as.integer(1:dim(d)[[2]])) {
 for (j in as.integer(1:3)) {
   ADFtable[3*(i-1) + j,1] <- colnames(d)[[i]]
   }
ADFtable[3*i-2,2] <- "dt"
ADFtable[3*i-2,10] <- "dt"
ADFtable[3*i-1,2] <- "d"
ADFtable[3*i-1,10] <- "d"
ADFtable[3*i,2] <- "-"
ADFtable[3*i,10] <- "-"
}
ADFtable
}

repexa <- as.data.frame(matrix(c(rnorm(10), rnorm(10), rnorm(10), rnorm(10), rnorm(10), rnorm(10)),ncol=6),stringsAsFactors = FALSE)
adfcstable(repexa)
#      var  type levelt Pc c  Pt t  prob omlo type 1stDifft Pc c  Pt t  prob
# [1,] "V1" "dt" NA     NA NA NA NA NA   NA   "dt" NA       NA NA NA NA NA  
# [2,] "V1" "d"  NA     NA NA NA NA NA   NA   "d"  NA       NA NA NA NA NA 

在 var 和 type 列中,引号内有值。我希望数据框中的字符串值不带引号。

我做了什么来解决这个问题:

我在 SOF 中分析过类似的问题:

assigning a string to an object without double quotes
Remove quotes from a character vector in R
R: How to remove quotation marks in a vector of strings, but maintain vector format as to call each individual value?

但是,它们在我的示例中不起作用:我在尝试这些技巧时遇到了以下错误:
1. # 在代码中,我改成了这个(但没有起作用) :
ADFtable[3*i-2,2]

2. # 在代码中,我改成了这个(但没有用):
# ADFtable[3*i-2,2]

3. # 在代码中,我改成了这个(但给出了错误): # ADFtable[3*i-2,2]

# I analyzed the error:
cat(paste0("\n", "dt", "\n"))           # dt
length(cat(paste0("\n", "dt", "\n")))   # 0
# Find the reason: Assigning a 0-lengthed value to 1-lengthed one.

4. print(adfcstable(repexa), quote=FALSE) 有点作用:但它在显示数据框时将“NA”值更改为“”值。

我想要的是(将数据框显示为函数的返回值):

adfcstable(repexa)
#      var  type levelt Pc c  Pt t  prob omlo type 1stDifft Pc c  Pt t  prob
# [1,] V1 dt NA     NA NA NA NA NA   NA   dt NA       NA NA NA NA NA  
# [2,] V1 d  NA     NA NA NA NA NA   NA   d  NA       NA NA NA NA NA 

非常感谢任何帮助。

【问题讨论】:

  • 您的函数似乎返回一个矩阵,而不是 data.frame,这可能是您看到这些引号的原因。在您的函数中导致矩阵输出的代码是ADFtable &lt;- cbind(LevelADFtable, FirstDiffADFtable, Result),因为您cbind 有几个矩阵。如果您将其包装在 as.data.frame 中,它应该最终返回一个 data.frame(但未经测试)。
  • "&lt;NA&gt;"print 在特定类中显示一些缺失值的方式。如果您希望 R 以不同的方式表现,您将需要为它定义另一个类和一个打印方法。这些不是那些向量中的值。
  • @BondedDust,不确定您对问题标题的编辑(从 data.frame 更改为 matrix)是否代表 OP 的意图。我认为他们认为它不是一个 data.frame - 所以也许他们想知道如何正确地将它作为 data.frame 返回?
  • @BondedDust ,请重新更改标题以反映原始标题(数据框大小写)和当前标题(矩阵大小写)。 Docendo 的巧妙解决方案因这个新标题而变得模糊不清。
  • @ErdoganCEVHER:原始标题错误地描述了您创建的对象。这是一个矩阵。您可以更改代码以创建 data.frame,也可以自己更改标题。

标签: r string quotes


【解决方案1】:

这应该适用于该矩阵对象。查看 ?print 页面:

print(adfcstable(repexa), quote=FALSE, na.print="NA")

我最初认为您有一个因素列,如果是这种情况,那么这个建议可能会有所帮助。: 如果您希望 NA 不显示为 "&lt;NA&gt;",这是 print 在因子向量中显示 NA 值的方式),那么您必须防止 data.frame 方法创建因子。这可以通过

在全局级别上完成
options('stringsAsFactors'=FALSE)

或者,您可以在每次调用 read.table 及其表亲以及所有 data.frame 调用中使用该参数。

【讨论】:

    【解决方案2】:

    (由 docendo discimus 解决)

    为了使用 docendo 的技巧,我在代码中添加了“ADFtable

    ADFtable <- cbind(LevelADFtable, FirstDiffADFtable, Result) # 18 x 18
    ADFtable <- as.data.frame(ADFtable)
    

    结果是没有引号。非常感谢,docendo。

    【讨论】:

    • 欢迎。请注意,您也可以一步完成 (as.data.frame(cbind(LevelADFtable, FirstDiffADFtable, Result)))。此外,可能您可以对代码进行更多改进,但这不是这里的问题。
    • 有必要警告你,StackOverflow 和 Rhelp 上出现了很多很多问题,因为人们使用 as.data.frame(cbind(...)) 并因为沉默而得到意想不到的结果将字符向量强制转换为因子。
    • 好点,@BondedDust。应该写as.data.frame(cbind(LevelADFtable, FirstDiffADFtable, Result), stringsAsFactors = FALSE)
    猜你喜欢
    • 1970-01-01
    • 2020-06-10
    • 2022-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 2018-01-19
    相关资源
    最近更新 更多