Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql data.frame结构fubar:结构表示大部分字符,打印表示部分字符_Sql_R_Dataframe - Fatal编程技术网

Sql data.frame结构fubar:结构表示大部分字符,打印表示部分字符

Sql data.frame结构fubar:结构表示大部分字符,打印表示部分字符,sql,r,dataframe,Sql,R,Dataframe,我正在使用sqldf对一个巨大的文件进行子集划分。下面的命令为我提供了一个包含100行和42列的data.frame first <- read.csv.sql("first.txt", sep = " ", header = TRUE, row.names = FALSE, sql = "SELECT * FROM file WHERE n = '\"n63\"' AND ratio = 1 AND r_name = '\"r1\"' AND method = '\"ne

我正在使用
sqldf
对一个巨大的文件进行子集划分。下面的命令为我提供了一个包含100行和42列的data.frame

first <- read.csv.sql("first.txt", sep = " ", header = TRUE, row.names = FALSE,
        sql = "SELECT * FROM file WHERE n = '\"n63\"' AND ratio = 1 AND r_name = '\"r1\"' AND method = '\"nearest\"' AND variables = 10")
现在,基于此,您可以预期,当我打印data.frame时,所有列(除了
int
之外)都将是字符(用“”括起来)。但是你错了

  test_before test_after meanPSmatchRATIO del-  nUNMATCHt caliper    method r_name ratio     n variables
1        TRUE       TRUE 1.54845330373635 eted          0    "no" "nearest"   "r1"     1 "n63"        10
2        TRUE       TRUE 1.16857102212364 ...           0    "no" "nearest"   "r1"     1 "n63"        10
3        TRUE       TRUE 1.25330045961256 ...           0    "no" "nearest"   "r1"     1 "n63"        10
4        TRUE       TRUE  1.8011651466717 ...t          0    "no" "nearest"   "r1"     1 "n63"        10

请注意,只有最后几列是“字符”。我对正在发生的事情有点不知所措。有人能解释一下吗?

您看到了数据帧对象的
print
方法的默认行为。请参见
?print.data.frame
,它具有:

   quote: logical, indicating whether or not entries should be printed
          with surrounding quotes.
因此,如果要引用打印对象,请使用
quote=TRUE
。例如:

> dat <- data.frame(X = c("A","B"), Y = c("1","2"), stringsAsFactors = FALSE)
> dat
  X Y
1 A 1
2 B 2
> dat[,1] ## not using the data frame print method...
[1] "A" "B"
> print(dat, quote = TRUE)
    X   Y
1 "A" "1"
2 "B" "2"
>dat-dat
xy
1 A 1
2 B 2
>dat[,1]##未使用数据帧打印方法。。。
[1] “A”“B”
>打印(dat,quote=TRUE)
xy
1“A”“1”
2“B”“2”

编辑:关于@Roman的评论,使用引号打印的列包含数据中的嵌入引号。例如,
clipper
的第一个元素是
“\”no\”
,因此打印的是嵌入的引号,因此与
print.data.frame()的默认行为完全一致
print.data.frame
通常不会为字符列打印引号,但最后几列中嵌入了引号,这就是默认情况下它们显示为“引号”的原因

Data <- data.frame(x=1:5,y=as.character(1:5),
  z=letters[1:5], q=paste("\"",letters[1:5],"\"",sep=""))
print(Data)  # default print
#   x y z   q
# 1 1 1 a "a"
# 2 2 2 b "b"
# 3 3 3 c "c"
# 4 4 4 d "d"
# 5 5 5 e "e"
print(Data, quote=TRUE)  # show embedded quotes
#     x   y   z       q
# 1 "1" "1" "a" "\"a\""
# 2 "2" "2" "b" "\"b\""
# 3 "3" "3" "c" "\"c\""
# 4 "4" "4" "d" "\"d\""
# 5 "5" "5" "e" "\"e\""

数据我不知道你的意思。在控制台显示数据帧时,不引用字符对我来说似乎很正常。如果我检查单个列,而不是整个数据帧,它将引用元素。包括卡尺、方法、r_名称和n。然而,只有前面提到的列会打印出一个
,其他所有列的行为都是因子或数字(或前两列的情况,逻辑)。这些列嵌入了
卡钳的第一个元素是
“否”
!我编辑了str(…)的输出,这样至少下一个读者可以立即看到重要的位。(在打印对象时,对该对象执行类似操作会使其成为一个更“最小”的示例。)
Data <- data.frame(x=1:5,y=as.character(1:5),
  z=letters[1:5], q=paste("\"",letters[1:5],"\"",sep=""))
print(Data)  # default print
#   x y z   q
# 1 1 1 a "a"
# 2 2 2 b "b"
# 3 3 3 c "c"
# 4 4 4 d "d"
# 5 5 5 e "e"
print(Data, quote=TRUE)  # show embedded quotes
#     x   y   z       q
# 1 "1" "1" "a" "\"a\""
# 2 "2" "2" "b" "\"b\""
# 3 "3" "3" "c" "\"c\""
# 4 "4" "4" "d" "\"d\""
# 5 "5" "5" "e" "\"e\""