【问题标题】:Add new column and new value [duplicate]添加新列和新值[重复]
【发布时间】:2018-02-23 01:59:08
【问题描述】:

我有一个名为“new”的表,我想从 ManufactureDate 中提取年份到新列“year”。

新$制造日期:

2014-01-01 
2016-01-01
2005-01-01
1997-11-01

创建一个新列,“新”将如下所示:

ManufactureDate    year
2014-01-01         2014
2016-01-01         2016
2005-01-01         2005
1997-11-01         1997

我的代码:

for (i in 1:nrow(new)){
  new["year"] <- NA
  new$year[i] <- strsplit(new$ManufactureDate, "-")[[i]][1]
  print(new$year[i])
}

结果: 它打印成功,但是当我检查表“新”时,它显示如下,不知道发生了什么:

ManufactureDate    year
2014-01-01         NA
2016-01-01         NA
2005-01-01         NA
1997-11-01         1997

【问题讨论】:

    标签: r data.table strsplit


    【解决方案1】:

    实际上,我什至会投票反对创建年份列。如果您使用的是实际日期列,那么您应该从该现有列中提取年份,而不是对数据进行非规范化并创建一个虚拟年份列。

    df <- data.frame(ManufactureDate=as.Date(c("2014-01-01", "2016-01-01",
                                               "2005-01-01", "1997-11-01")))
    format(df$ManufactureDate, "%Y")
    [1] "2014" "2016" "2005" "1997"
    

    【讨论】:

    • 谢谢!这对我来说实际上很容易理解:)
    【解决方案2】:

    不需要for 循环。除了您迄今为止尝试过的(使用strsplit)之外,还有一种可能性:

    new$year <- sapply(strsplit(as.character(new$ManufactureDate), "-"), "[[", 1);
    #  ManufactureDate year
    #1      2014-01-01 2014
    #2      2016-01-01 2016
    #3      2005-01-01 2005
    #4      1997-11-01 1997
    

    样本数据

    new <- read.table(text =
        "ManufactureDate
        2014-01-01
    2016-01-01
    2005-01-01
    1997-11-01", header = T)
    

    【讨论】:

    • 谢谢!它运作良好!我只是还没学会如何使用 sapply。
    • 不用担心@Lara19;熟悉sapply/lapply(以及整个*apply 家族)肯定会花时间在未来的R 编码上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 2021-11-25
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多