首页 文章

R创建data.frame并将对象视为.Date - R版本3.5.0 - Rstudio版本1.1.447 -

提问于
浏览
0

我正在玩一个数据框,我无法解决问题 . 这是我使用的代码:

Died.At <- c(22,40,72,41)
Writer.At <- c(16, 18, 36, 36)
First.Name <- c("John", "Edgar", "Walt", "Jane")
Second.Name <- c("Doe", "Poe", "Whitman", "Austen")
Sex <- c("MALE", "MALE", "MALE", "FEMALE")
Date.Of.Death <- c("2015-05-10", "1849-10-07", "1892-03-26","1817-07-18")
writersdataframe <- data.frame(Died.At, Writer.At, I(First.Name), I(Second.Name), Sex, as.Date(Date.Of.Death))

这是结果:

str (writersdataframe)
'data.frame':   4 obs. of  6 variables:
 $ Died.At               : num  22 40 72 41
 $ Writer.At             : num  16 18 36 36
 $ First.Name            : 'AsIs' chr  "John" "Edgar" "Walt" "Jane"
 $ Second.Name           : 'AsIs' chr  "Doe" "Poe" "Whitman" "Austen"
 $ Sex                   : Factor w/ 2 levels "FEMALE","MALE": 2 2 2 1
 $ as.Date.Date.Of.Death.: Date, format: "2015-05-10" "1849-10-07" "1892-03-26" ...

我编写了这样的代码,因为我希望R将Date.Of.Death解释为日期,但我不希望as.Date显示在数据框内的列名称中 . 我找到了一种方法,即在创建数据框之前更改格式:

Date.Of.Death <- as.Date(Date.Of.Death)
writersdataframe <- data.frame(Died.At, Writer.At, I(First.Name), I(Second.Name), Sex, I(Date.Of.Death))

我查了一下:

class(writersdataframe$Date.Of.Death)
[1] "AsIs" "Date"

我想知道的是,如果我可以在函数data.frame中直接处理Date.Of.Death as.Date时创建数据框 . 是否有理由这样做(例如:

writersdataframe <- data.frame(Died.At, Writer.At, I(First.Name), I(Second.Name), Sex, as.Date(Date.Of.Death))

)重命名列 Headers 或我犯了错误?

1 回答

  • 0

    请参阅以下说明以获得澄清 .

    有几种方法可以解决原始问题中的问题 .

    解决方案1:直接指定所有列名称 . 这更明确,使您的代码更具可读性 .

    writersdataframe <- data.frame(Died.At = Died.At, Writer.At = Writer.At, First.Name = First.Name, Second.Name = Second.Name, Sex = Sex, Date.of.Death = as.Date(Date.Of.Death))
    

    在这种情况下,您可以根据 data.frame() 函数中'='符号左侧的内容显式命名每列 . 在'='符号的右侧,您可以为这些列指定值 . 您可以通过输入原始数据或输入已在环境中设置的变量来执行此操作 . 在这种情况下,您似乎正在尝试使用已设置的变量创建数据框 .

    一般来说,当您在函数中指定参数时,您将需要使用'='符号,在本例中为 data.frame() . 当您想要创建一个新变量时,您将使用赋值运算符'<-',就像您在问题的第一个代码块中使用它一样 .

    当您在第一个代码块中的 data.frame 函数中指定 as.Date(Date.of.Death) 时,数据框函数将查看现有变量 Date.of.Death ,并将其转换为具有新日期格式的新变量 . 通过在 data.frame() 函数中首先指定列名,您不会在全局环境中创建变量 . 您只是根据现有的Date.of.Death变量在数据框中创建一个新列 .

    另一种方法是将所有内容转换为原始Date.of.Death变量中的日期 . 见下文 .

    Date.Of.Death <- as.Date(c("2015-05-10", "1849-10-07", "1892-03-26","1817-07-18"))
    
    writersdataframe <- data.frame(Died.At, Writer.At, I(First.Name), I(Second.Name), Sex, I(Date.Of.Death))
    

    希望这可以帮助 .

相关问题