R中的数据表很奇怪,列名混合在一起

时间:2018-12-27 11:00:48

标签: r datatable

因此,我在名为mc_split_device的数据表中创建了名为mc_with_devices的变量。但是,如果我键入mc_with_devices$mc_split,则会得到列mc_split_device的值,而我从未创建任何名称为mc_split的变量。

enter image description here

3 个答案:

答案 0 :(得分:4)

请参见Hadley Wickham's Advanced R

  

$是简写运算符,其中x $ y等于x [[“ y”,确切= FALSE]]。它通常用于访问数据框中的变量,例如mtcars $ cyl或diamonds $ carat。

所以exact=FALSE$mc_split起作用的原因,尽管没有确切名称的列。

顺便说一句,我相信mc_with_devices[,.(mc_split)]不能在没有双引号的情况下工作。以下将起作用:

mc_with_devices[,"mc_split_resp"]

答案 1 :(得分:3)

它部分匹配列的名称。来自?Extract

  

名称:对于提取,通常与对象名称部分匹配(请参见“环境”下的内容)。

     

在某些情况下,字符索引可以部分匹配(请参阅pmatch)与被子集对象的名称或暗名

     

因此,默认行为是仅在通过$从递归对象(环境除外)中提取时使用部分匹配。

因此,当您这样做

mtcars$m

你得到

#[1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4
#[17] 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4

mtcars$mpg

有时可能会造成混淆,并且如果您希望确保在完成部分匹配时收到通知。您可以通过以下方式打开警告

options(warnPartialMatchDollar = TRUE)
mtcars$m
# [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4
#[17] 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4
  

警告信息:   在$.data.frame(mtcars,m)中:数据帧中“ m”与“ mpg”的部分匹配

答案 2 :(得分:0)

根据?Extract

  

name-文字字符串或名称(可能用反引号引起来)。对于提取,通常这与对象名称部分匹配(请参见“环境”下的内容)。

exact

  

exact-控制[[通过字符向量提取时可能的部分匹配(对于大多数对象,请参见“环境”下的内容)。默认为不部分匹配。值NA允许部分匹配,但在发生部分匹配时发出警告。值为FALSE允许部分匹配,而不会发出任何警告。

所以,当我们这样做

mtcars$m
#[1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3
#[27] 26.0 30.4 15.8 19.7 15.0 21.4

mtcars$d
#NULL

因为有多个以“ d”开头的名称

 names(mtcars)
 #[1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"

如果具体的话,它会对“ disp”列进行部分匹配

mtcars$di
#[1] 160.0 160.0 108.0 258.0 360.0 225.0 360.0 146.7 140.8 167.6 167.6 275.8 275.8 275.8 472.0 460.0 440.0  78.7  75.7  71.1 120.1
#[22] 318.0 304.0 350.0 400.0  79.0 120.3  95.1 351.0 145.0 301.0 121.0