【问题标题】:Read CSV in R with first column as dataframe header读取 R 中的 CSV,第一列作为数据框标题
【发布时间】:2016-12-06 15:50:36
【问题描述】:

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

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

我想将其作为数据框读入(称为 df),但已转置,以便我可以按名称访问年龄,这样 df$John 将返回 32。我该怎么做?

之前我尝试创建一个新的数据框tdf,循环遍历for 循环中的数据,分配每个nameage,然后以tdf[name] = age 的形式插入空数据框,但这并没有按预期工作。

【问题讨论】:

  • 不确定read.csv()readr::read_csv(),但为什么不直接读入,然后使用dplyr::filter()dplyr::select() 获取分析管道中所需的值?
  • 看完为什么不转置呢?
  • 只需 split 按名称的年龄获取键/值对,然后您可以通过 lst[["john"]] 访问值

标签: r csv dataframe


【解决方案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

而且,正如你所问,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

【讨论】:

    【解决方案2】:

    当您从文件中读取时,这应该将行添加为标题

    read.csv2(filename, as.is = TRUE, header = TRUE)
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-26
        • 2018-05-17
        • 1970-01-01
        • 2013-10-11
        相关资源
        最近更新 更多