当前位置: 首页 > 知识库问答 >
问题:

从 R 读取 csv 文件

郎琪
2023-03-14

我是R的新手,想读一个csv文件。但是当我试图阅读它时,我遇到了错误。我的csv文件如下:

,Zbot,Sirefef,Fareit,Winwebsec,FakeSysdef,Winwebsec,Winwebsec,Winwebsec,Fareit,Fareit,Sirefef,Winwebsec,Winwebsec,Winwebsec,Winwebsec
Zbot,0,134,45,651,182,245,986,64,63,34,134,166,52,337,225
Sirefef,142,0,124,679,200,273,1018,156,125,122,164,198,120,371,257
Fareit,48,124,0,644,166,234,978,82,64,51,135,167,49,338,224
Winwebsec,651,499,470,0,575,556,1087,525,490,485,501,511,483,600,582
FakeSysdef,178,172,143,535,0,311,1052,196,163,152,204,234,154,405,285
Winwebsec,245,199,168,478,229,0,997,217,186,183,199,209,183,348,272
Winwebsec,986,752,719,821,784,727,0,774,739,734,750,760,734,851,829
Winwebsec,80,160,85,506,179,204,757,0,100,85,173,205,89,376,264
Fareit,65,95,32,468,141,164,715,78,0,57,135,165,59,336,226
Fareit,52,122,51,468,143,166,717,68,40,0,135,163,49,336,224
Sirefef,136,118,85,449,150,147,696,123,83,83,0,146,100,317,207
Winwebsec,164,138,105,449,170,145,696,143,103,103,80,0,118,315,215
Winwebsec,52,116,51,466,143,166,717,66,42,32,83,103,0,336,226
Winwebsec,335,267,234,496,301,246,745,272,232,234,213,213,234,0,346
Winwebsec,225,204,171,519,228,217,774,207,169,169,150,160,169,291,0

当我在RStudio中使用此命令时,我得到了错误:命令:

> tb = read.csv("/home/hossein/Documents/LiClipse Workspace/test.csv", row.names = 1);

错误:

读取时出错。表(file=file,header=header,sep=sep,quote=quote,:不允许重复的“row.names”

我还尝试删除错误并使用此命令:

 > tb = read.csv("/home/hossein/Documents/LiClipse Workspace/test.csv", row.names = NULL);

但是当我查看输出时,它不能保持方阵的结构。你能帮我做什么吗?

共有3个答案

岑明辉
2023-03-14

第一行以空白字段开始,因此使用skip=1参数可能很方便,可能是因为read.csv不将输入函数理解为矩形数组。

郑宇
2023-03-14

您可以通过几个简单的步骤执行此操作,如下所示:

d = read.csv('path/to/test.csv') # import the data
row.names(d) = make.unique(as.character(d[, 1])) # create the row names from the first column
d = d[, -1] # remove the first column now that you don't need it anymore

这将维护您的平方矩阵:

dim(d) # still a 15x15 matrix
咸正平
2023-03-14

R 不支持重复的行名,请参阅 ? 行名称

所有数据框都具有行名称属性,即长度为行数的字符向量,没有重复项,也没有缺失值。

鉴于此,您可以导入数据,然后使用函数make.names使行名称唯一。这有点难看,但我认为它解决了你的问题。请参阅下面的示例和您提供的数据。

table <- read.csv("data.csv", row.names = NULL)

### Save row names in a separte object:
rows <- table$X

### Remove the colunm with row.names:
table <- table[,-1]

### Create unique Row.names with the function `make.names`
rownames(table) <- make.names(rows, unique=TRUE)

### Check results:
dim(table)
#> [1] 15 15
head(table)
#>             Zbot Sirefef Fareit Winwebsec FakeSysdef Winwebsec.1
#> Zbot           0     134     45       651        182         245
#> Sirefef      142       0    124       679        200         273
#> Fareit        48     124      0       644        166         234
#> Winwebsec    651     499    470         0        575         556
#> FakeSysdef   178     172    143       535          0         311
#> Winwebsec.1  245     199    168       478        229           0
#>             Winwebsec.2 Winwebsec.3 Fareit.1 Fareit.2 Sirefef.1
#> Zbot                986          64       63       34       134
#> Sirefef            1018         156      125      122       164
#> Fareit              978          82       64       51       135
#> Winwebsec          1087         525      490      485       501
#> FakeSysdef         1052         196      163      152       204
#> Winwebsec.1         997         217      186      183       199
#>             Winwebsec.4 Winwebsec.5 Winwebsec.6 Winwebsec.7
#> Zbot                166          52         337         225
#> Sirefef             198         120         371         257
#> Fareit              167          49         338         224
#> Winwebsec           511         483         600         582
#> FakeSysdef          234         154         405         285
#> Winwebsec.1         209         183         348         272
as.dist(table)
#>             Zbot Sirefef Fareit Winwebsec FakeSysdef Winwebsec.1
#> Sirefef      142                                                
#> Fareit        48     124                                        
#> Winwebsec    651     499    470                                 
#> FakeSysdef   178     172    143       535                       
#> Winwebsec.1  245     199    168       478        229            
#> Winwebsec.2  986     752    719       821        784         727
#> Winwebsec.3   80     160     85       506        179         204
#> Fareit.1      65      95     32       468        141         164
#> Fareit.2      52     122     51       468        143         166
#> Sirefef.1    136     118     85       449        150         147
#> Winwebsec.4  164     138    105       449        170         145
#> Winwebsec.5   52     116     51       466        143         166
#> Winwebsec.6  335     267    234       496        301         246
#> Winwebsec.7  225     204    171       519        228         217
#>             Winwebsec.2 Winwebsec.3 Fareit.1 Fareit.2 Sirefef.1
#> Sirefef                                                        
#> Fareit                                                         
#> Winwebsec                                                      
#> FakeSysdef                                                     
#> Winwebsec.1                                                    
#> Winwebsec.2                                                    
#> Winwebsec.3         757                                        
#> Fareit.1            715          78                            
#> Fareit.2            717          68       40                   
#> Sirefef.1           696         123       83       83          
#> Winwebsec.4         696         143      103      103        80
#> Winwebsec.5         717          66       42       32        83
#> Winwebsec.6         745         272      232      234       213
#> Winwebsec.7         774         207      169      169       150
#>             Winwebsec.4 Winwebsec.5 Winwebsec.6
#> Sirefef                                        
#> Fareit                                         
#> Winwebsec                                      
#> FakeSysdef                                     
#> Winwebsec.1                                    
#> Winwebsec.2                                    
#> Winwebsec.3                                    
#> Fareit.1                                       
#> Fareit.2                                       
#> Sirefef.1                                      
#> Winwebsec.4                                    
#> Winwebsec.5         103                        
#> Winwebsec.6         213         234            
#> Winwebsec.7         160         169         291
 类似资料:
  • 问题内容: 我有一个CSV文件,下面是其外观示例: 我知道如何读取文件并打印每列(例如- )。但是我真正想做的是读取行,就像这样,然后依此类推。 然后,我想将这些数字存储到变量中,以便稍后将它们总计(例如): 。那我可以做。 我将如何在Python 3中做到这一点? 问题答案: 您可以执行以下操作: 要么 : 编辑:

  • 我是Jmeter的新手,正在尝试在HTTP GET请求的路径中使用CSV文件中的变量。 我已经翻阅了这个问题的各种教程和答案,但我还是弄不清我做错了什么。文件只有一个头(ID)。如果我在路径中输入ID,它可以工作,但当我尝试从CSV文件中读取它时,它就失败了:

  • 问题内容: 我正在尝试根据我已经拥有的csv检查提取数据的值。它只会循环遍历CSV的行一次,我只能检查feed.items()的一个值。我需要在某个地方重置值吗?有没有更好/更有效的方法来做到这一点?谢谢。 问题答案: 您可以通过重置文件对象的读取位置来“重置” CSV迭代器。

  • 问题内容: 我正在从包含以下数据的CSV文件(xyz.CSV)中读取数据: 当我使用循环对其进行迭代时,我可以按以下代码逐行打印数据,并且仅打印column1数据。 通过上面的代码,我只能得到第一列。 如果我尝试打印line [1]或line [2],则会出现以下错误。 请建议打印列2或列3的数据。 问题答案: 这是我获得第二列和第三列的方法: 结果如下:

  • 我正在尝试读取Mac上pig shell上的csv文件。我所做的只是文件到变量中,然后变量。我是这样做的: 我使用的数据是从这里提供的github下载的 此文件在我的Mac上的本地安装的hdfs中可用。当我执行时,我得到一个错误: org.apache.pig.impl.logicallayer.FrontendException:错误1066:无法打开别名影片的迭代器 在org.apache.p

  • 我使用Jmeter和Selenium Webdriver采样器 代码CSV配置 我的问题是它没有从CSV中挑选。以上两行生成结果“loginName”,而不是从文件中选择实际的登录名。我用过单引号、双引号等,但运气不佳。使用${loginName}会产生错误。知道什么地方出了问题,如何解决吗?