将单独的列/行组合为R中的一列/行

时间:2017-03-20 23:13:11

标签: r read.table

使用class DefaultArray implements arrayaccess { private $default='Default Value'; private $properties=[]; function __construct($default_value) { $this->default=$default_value; } function offsetSet($property, $value) { $this->properties[$property]=$value; return $this; } function offsetGet($property) { return isset($this->properties[$property])? $this->properties[$property]:$this->default; } function offsetExists($property) { return isset($this->properties[$property]); } function offsetUnset($property) { unset($this->properties[$offset]); } } $myArray=new DefaultArray('my default value'); $myArray['bye'] = 'goodbye'; var_dump($myArray['bye']); // <-- would print 'goodbye' var_dump($myArray['hello']); // <-- would print 'my default value' ,我有这个数据集:

txt.file

使用此功能,

                                   Xenopsylla cheopis    Echinolaelaps sp.      
Maxomys rajah                         1                    3                                                      
Callosciurus prevostii borneensis     4                    2    

R似乎将我的数据识别为不同的列/行并产生此错误:

test<-read.table("data.txt",header=T)
              Xenopsylla   cheopis    Echinolaelaps   sp.      
Maxomys        rajah         1            3                                                      
Callosciurus   prevostii   borneensis     4            2  

我试图使用Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : line 2 did not have 4 elements ,但似乎它没有产生我想要的东西

1 个答案:

答案 0 :(得分:1)

首先,我将数据存储在角色向量中,就像我在这里所做的那样:

test<-readChar("C:/Users/Julian/Downloads/file.txt", file.info("C:/Users/Julian/Downloads/file.txt")$size)

显然,你需要用你的文件替换我文件的路径。 然后使用gsub()

摆脱Genus和Species之间的空间
test<-gsub("([[:lower:]])([[:space:]])([[:lower:]])", "\\1\\3",test)

最后,您可以使用带有read.table()参数的text来阅读您的数据:

 a<-read.table(text=test,sep="\t",header=TRUE,row.names = 1)
 a

                                Xenopsyllacheopis Echinolaelapssp. Ixodessp.
Maxomysrajah                                    3                8         9
Callosciurusprevostiiborneensis                 5                7         1
Sundamysmuelleri                                3                5         7
Niviventercremoriventer                         6                8         9

修改 在评论中回答OP的新问题:

"([[:lower:]])([[:space:]])([[:lower:]])"

使我们能够找到我们使用readChar()创建的与此模式匹配的字符串的所有部分。此模式为:小写字母后跟空格,后跟小写字母。

您可以理解这个属与种的名称匹配,但不能理解物种名称和以下属,因为属以大写字母开头。

现在"\\1\\3"部分意味着我们保留了我们的第一部分和第三部分 "([[:lower:]])([[:space:]])([[:lower:]])"模式。那是([[:lower:]])([[:lower:]])。由于"\\1中的\\3"\\1\\3"之间没有空格,我们将在没有空格的情况下加入它们。因此,我们将有Genusspecies而不是Genus物种。