添加新列和新值
Add new column and new value
我有一个名为 "new" 的 table,我想从 ManufactureDate 中提取年份到一个新列 "year"。
新$制造日期:
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])
}
结果:
打印成功了,但是我查看table "new"的时候是这样的,不知道是怎么回事:
ManufactureDate year
2014-01-01 NA
2016-01-01 NA
2005-01-01 NA
1997-11-01 1997
不需要 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)
实际上,我什至要投票反对创建年份列。如果您使用的是实际日期列,那么您应该从该已经存在的列中提取年份,而不是对数据进行非规范化并创建虚拟年份列。
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"
我有一个名为 "new" 的 table,我想从 ManufactureDate 中提取年份到一个新列 "year"。
新$制造日期:
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])
}
结果: 打印成功了,但是我查看table "new"的时候是这样的,不知道是怎么回事:
ManufactureDate year
2014-01-01 NA
2016-01-01 NA
2005-01-01 NA
1997-11-01 1997
不需要 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)
实际上,我什至要投票反对创建年份列。如果您使用的是实际日期列,那么您应该从该已经存在的列中提取年份,而不是对数据进行非规范化并创建虚拟年份列。
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"