在R中读取和转换为数据帧

时间:2016-04-16 06:44:27

标签: r list dataframe

我刚刚将csv文件导入为数据框。我做到了。

myframe <- data.frame(read.csv("afile.csv"))

但是当我使用&#39; typeof()&#39;功能在&#39; myframe&#39;上,我得到一个列表。

> typeof(myframe)
[1] "list"

&#39; myframe&#39;原来是一个嵌套列表。试图更改myframe中第9个列表的名称绝对没有任何意义。我甚至都没有收到错误。这是我的代码。

colnames(myframe[9]) <- "ColName"

我无法将此列表转换为数据框(无论我做什么)。我尝试的任何方法都没有错误但却什么也没做。我试过这个。

myframe <- as.data.frame(myframe)

myframe  <-  as.data.frame(matrix(unlist(myframe), nrow=length(unlist(myframe[1]))))

(如另一篇文章所示)

所以这基本上是一个4部分的问题,

  1. 我的R是否符合预期?
  2. 为什么没有返回错误?
  3. 如何更改该列的名称?
  4. 如何将嵌套列表转换为数据框?

2 个答案:

答案 0 :(得分:1)

OP的帖子中有几个问题。

  1. 作为data.frame读取

    read.csv提供data.frame输出。所以,没有必要用data.frame包裹,即

    myframe <- read.csv("afile.csv")
    

    如果分隔符不同,请使用sep参数,对于非数字变量,stringsAsFactors=TRUE的默认选项(因为read.csv)将返回{{1作为class。在这种情况下,请使用factor

  2. 更改数据集中的列名称。这可以通过选择我们想要更改的列名来完成。在我们更改第9列名称时,通过索引选择它,然后将其分配(stringsAsFactors=FALSE)到新名称。

    <-
  3. 通过选中colnames(myframe)[9] <- "ColName" typeof(myframe)"list"data.frame list lengthlist元素等于。如果我们想检查它是否是data.frame

    is.data.frame(myfile) 
    

    str(myframe)
    
  4. 仅当存在error时才会返回错误消息。在这里,当您通过data.frame电话打包data.frame时,它不会给出错误。例如

    df1 <- data.frame(v1 = 1:5)
    str(df1)
    #'data.frame':   5 obs. of  1 variable:
    #$ v1: int  1 2 3 4 5
    

    data.frame换行不会改变任何东西,除非它是多余的。当然,我们可以data.frame(data.frame(data.frame(df1)))进行测试作为练习。

    str(data.frame(df1))
    #'data.frame':   5 obs. of  1 variable:
    #$ v1: int  1 2 3 4 5
    

答案 1 :(得分:0)

文件的默认存储是一个数据帧。无需将其设为数据帧。

    myframe <- read.csv(file.choose(),sep=",",header=T) #Select your file interactively.
    class(myframe)       
    mode(myframe)
    typeof(myframe)
    names(myframe)[9] <- "ColName"   ## Renaming column no. 9 of dataframe