2016-12-06 1468 views
0

我有一个简单的文本文件,其中第一列是名称(字符串),第二列是值(浮动)。作为一个例子,姓名和年龄:我想读这为数据帧在R中读取CSV并将第一列作为数据框标头

Name, Age 
John, 32 
Heather, 46, 
Jake, 23 
Sally, 19 

(称之为df),但换位,这样我可以通过名字,使得df$John将返回32访问青睐。我怎样才能做到这一点?

上我试图创建一个新的数据帧,tdf,通过数据的for回路循环,分配每个nameage,然后插入空数据帧为tdf[name] = age,但如我所料并没有工作。

+0

用'read.csv不知道()'或'readr :: read_csv()'但为什么不只是读像你这样做,然后用'dplyr ::滤波器()'和'dplyr: :select()'在你的分析管道中获取你需要的值? –

+0

为什么阅读后不要转置? –

+0

只需按名称分割年龄以获得密钥/值对,然后您可以通过lst [[“john”]]访问该值[ – akrun

回答

1

您可以使用read.table()来读取您的数据。

然后,您可以使用t()转置它并设置后缀名。

例子:

如果df是:

df=read.table("dummydata", header=T, sep=",") 

df 
    Name Age 
1 John 32 
2 Heather 46 
3 Jake 23 
4 Sally 19 

你调换的年龄,然后将它们转换成数据帧:

tdf=as.data.frame(t(df$Age)) 
colnames(tdf)=t(df$Name) 

因此TDF将返回:

tdf 
    John Heather Jake Sally 
1 32  46 23 19 

而且,作为y OU问,TDF $约翰将返回:

tdf$John 
[1] 32 

现在,如果你有两个以上的列,你可以做同样的替代,但表示列的名称,你可以简单地表明,在使用支架的位置。

df=read.table("dummydata", header=T, sep=",") 

用T(DF [2:NcoI位(DF)])你移调整个表从第二列中,不管列数开始。第一列将是转置后的名字。

tdf=as.data.frame(t(df[2:ncol(df)])) 

然后您设置columnames。

colnames(tdf)=t(df[1]) 

tdf$John 
[1] 32 
0

将数据读入一个数据帧,DF(见注)。

1)分配名称的DF排在这种情况下,这将给予约翰的年龄,而无需创建一个新的数据结构:

rownames(DF) <- DF$Name 
DF["John", "Age"] 
## [1] 32 

2)另外,拆分DF成命名表在这种情况下,你可以得到所要求的精确语法:

ages <- with(DF, split(Age, Name)) 
ages$John 
## [1] 32 

3)这种替代也将产生相同的列表:

ages <- with(DF, setNames(as.list(Age), Name)) 

注:DF在重现的形式如下。 (我们已经删除了后面的逗号上的问题,一条线,但它是否真的存在填充= TRUE到read.csv行添加。)

Lines <- "Name, Age 
John, 32 
Heather, 46 
Jake, 23 
Sally, 19" 
DF <- read.csv(text = Lines) 
0

当你从文件中读取这应该添加的行作为标题

read.csv2(filename, as.is = TRUE, header = TRUE) 
相关问题