添加新列和新值

时间:2018-02-23 01:59:08

标签: r data.table strsplit

我有一张名为" new"我想将每年从ManufactureDate提取到一个新专栏" year"。

新的$ ManufactureDate可以:

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

创建一个新列和" new"会是这样的:

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])
}

结果: 它打印成功,但当我检查表&#34; new&#34;时,它显示如下,不确定发生了什么:

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

2 个答案:

答案 0 :(得分:1)

不需要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)

答案 1 :(得分: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"