如何在显示矩阵时删除字符串值中的引号?
How to remove quotes in string values in displaying a matrix?
可重现示例:
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] <- noquote("dt")
2. # 在代码中,我改成这样(但没用):
# ADFtable[3*i-2,2] <- c("dt")
3. # 在代码中,我改成这样(但报错):
# ADFtable[3*i-2,2] <- paste0("\n", "dt", "\n")
adfcstable(repexa)
ADFtable[3 * i - 2, 2] <- cat(c("dt"), "\n") 中的错误:
要替换的项目数不是替换长度的倍数
# 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" 值更改为“< 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
非常感谢任何帮助。
这应该适用于该矩阵对象。查看打印页面:
print(adfcstable(repexa), quote=FALSE, na.print="NA")
我最初认为您有一个因子列,如果是这样的话,那么这个建议可能会有所帮助。:
如果您希望 NA 不显示为 "<NA>"
(打印在因子向量中显示 NA
值的方式),那么您必须防止 data.frame 方法创建因子。这可以通过
在全球范围内完成
options('stringsAsFactors'=FALSE)
或者您可以在对 read.table
及其表兄弟的每次调用以及所有 data.frame
调用中放置该参数。
(由 docendo discimus 解决)
为了使用 docendo 的技巧,我在代码中添加了 "ADFtable <- as.data.frame(ADFtable)" 行:
ADFtable <- cbind(LevelADFtable, FirstDiffADFtable, Result) # 18 x 18
ADFtable <- as.data.frame(ADFtable)
结果是没有引号。非常感谢,docendo。
可重现示例:
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] <- noquote("dt")
2. # 在代码中,我改成这样(但没用):
# ADFtable[3*i-2,2] <- c("dt")
3. # 在代码中,我改成这样(但报错): # ADFtable[3*i-2,2] <- paste0("\n", "dt", "\n") adfcstable(repexa) ADFtable[3 * i - 2, 2] <- cat(c("dt"), "\n") 中的错误: 要替换的项目数不是替换长度的倍数
# 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" 值更改为“< 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
非常感谢任何帮助。
这应该适用于该矩阵对象。查看打印页面:
print(adfcstable(repexa), quote=FALSE, na.print="NA")
我最初认为您有一个因子列,如果是这样的话,那么这个建议可能会有所帮助。:
如果您希望 NA 不显示为 "<NA>"
(打印在因子向量中显示 NA
值的方式),那么您必须防止 data.frame 方法创建因子。这可以通过
options('stringsAsFactors'=FALSE)
或者您可以在对 read.table
及其表兄弟的每次调用以及所有 data.frame
调用中放置该参数。
(由 docendo discimus 解决)
为了使用 docendo 的技巧,我在代码中添加了 "ADFtable <- as.data.frame(ADFtable)" 行:
ADFtable <- cbind(LevelADFtable, FirstDiffADFtable, Result) # 18 x 18
ADFtable <- as.data.frame(ADFtable)
结果是没有引号。非常感谢,docendo。