在R中读取CSV,第一列为数据帧标题

时间:2016-12-06 15:50:36

标签: r csv dataframe

我有一个简单的文本文件,其中第一列是名称(字符串),第二列是值(浮点数)。例如,姓名和年龄:

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

我希望将其作为数据框(请调用此df)进行阅读,但转置为可以按姓名访问年龄,以便df$John返回32。我怎么能这样做?

上一篇文章我尝试创建一个新的数据框tdf,循环遍历for循环中的数据,分配每个nameage,然后插入空数据框如tdf[name] = age但这没有按照我的预期发挥作用。

3 个答案:

答案 0 :(得分:2)

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

然后你可以使用t()转置它并在之后设置colnames。

示例:

如果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

而且,正如你所问,tdf $ John将返回:

tdf$John
[1] 32

现在,如果您有两个以上的列,您可以执行相同的操作,但不是指示列的名称,而只需使用括号指示位置。

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

使用t(df [2:ncol(df)])无论列数如何,都可以从第二列开始转置整个表格。第一列将是转置后的名称。

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

然后设置列名。

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

tdf$John
[1] 32

答案 1 :(得分:0)

将数据读入数据框DF(见注)。

1)将名称分配给DF的行,在这种情况下,这将为John提供年龄,而无需创建新的数据结构:

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的可重现形式如下。 (我们已在问题的一行中删除了尾随逗号,但如果确实存在,请在read.csv行添加fill = TRUE。)

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

答案 2 :(得分:0)

当您从文件

中读取时,这应该将该行添加为标题
read.csv2(filename, as.is = TRUE, header = TRUE)