我有以下CSV文件:
;A;C;D;E;F;G;H;I;K;L;M;N;P;Q;R;S;T;V;W;X;Y
Position1;0,054213776;0,003005945;0,027905128;0,00375423;0,290228233;0,064954976;0,002462278;0,047134442;0,005404894;0,081739388;0,002012803;0,046380669;0,020762236;0,03654459;0,057469835;0,011760176;0,002482397;0,026511666;0,108202585;0,011974854;0,058416108
Position2;0,004057157;0,041518985;0,019806132;0,051610208;0,003572703;0,036402843;0,074879075;0,010325334;0,044981263;0,09328763;0,03897166;0,064762246;0,029074767;0,004175355;0,013691361;0,109767515;0,046100376;0,002930728;0,248865169;0;0,028268182
Position3;0,051305224;0,064958634;0,025061506;0,001931642;0,022646096;0,053596034;0,060665537;0,002355053;0,002426384;0,264133805;0,030836312;0,032183821;0,018242803;0,048333116;0,11381004;0,066739613;0,052130556;0,005772064;0,047369009;2,92638E-05;0,033100145
基本上,我的行名是Position1,Position2,Position3,我的列名是A,B,C ....,Y。我使用以下命令将它们加载到R中:
data<- read.csv2(f, header=TRUE)
之前选择了f。
但是,如果我使用data[,1]
请求行名称,我会
[1] Position1 Position2 Position3
Levels: Position1 Position2 Position3
似乎没问题。但是,如果我现在通过data[1,]
询问列名,我会得到以下内容:
X A C D E F G H I K L M N P Q R S T V W X.1
1 Position1 0.05421378 0.003005945 0.02790513 0.00375423 0.2902282 0.06495498 0.002462278 0.04713444 0.005404894 0.08173939 0.002012803 0.04638067 0.02076224 0.03654459 0.05746983 0.01176018 0.002482397 0.02651167 0.1082026 0.01197485
Y
1 0.05841611
我不明白。出于某种原因,R认为第一个元素[1,1]应该有一个名称并使用X
,而在CSV文件中第一个元素是空的,即
[1,1]=empty A C D E..........Y
Position1
Position2
Position3
我应该如何阅读 R 中的CSV文件?
编辑:我删除了分号并使用了以下命令:data<- read.table(f, header=TRUE, sep=";")
但是,如果我现在想通过data[,1]
请求rownames,我会得到以下内容:
[1] 0,054213776 0,004057157 0,051305224
Levels: 0,004057157 0,051305224 0,054213776
,而data[1,]
列名称为:
A C D E F G H I K L M N P Q R S T V W
Position1 0,054213776 0,003005945 0,027905128 0,00375423 0,290228233 0,064954976 0,002462278 0,047134442 0,005404894 0,081739388 0,002012803 0,046380669 0,020762236 0,03654459 0,057469835 0,011760176 0,002482397 0,026511666 0,108202585
X Y
Position1 0,011974854 0,058416108
这仍然不正确。有什么建议吗?
答案 0 :(得分:2)
我认为
dat <- read.csv2("csvex.txt",row.names=1)
会做你想做的事。
rownames(dat)
## [1] "Position1" "Position2" "Position3"
dat[,1]
## [1] 0.054213776 0.004057157 0.051305224
dat["Position1",]
## A C D ...
## Position1 0.05421378 0.003005945 0.02790513 ...
dat[1,] ## same as dat["Position1",]
R matrix
或data.frame
中的行名和列名不被视为表数据的一部分(即,它们不是数据的第一行和第一行) - 相反,它们作为单独的属性保存,可以使用colnames(dat)
和rownames(dat)
检索(并使用rownames(dat) <- ...
和colnames(dat) <- ...
进行设置)。 dimnames()
对于同时检索或设置列名和行名非常有用......
header=TRUE
(这是read.csv[2]
的默认值)告诉R它应该将CSV文件的第一行视为列名(而不是假设它们是数据,并且它应该使通用列名称)。 row.names=1
告诉R它应该将CSV文件的第一列视为行名(同上)。
答案 1 :(得分:0)
标题行中A前面有一个分号。我想知道这是否会对阅读造成严重破坏?删除它,看看。