[英]R - create new column in data frame based on conditional
我需要在数据框中创建一列yrs,以自动将每个yr标识为"leap"
或"reg"
(常规)。
到目前为止,这是我所拥有的:
划定时间段
year<-(2009:2017)
在该时间段内创建具有单个列的数据框
prd_df<-data.frame(year)
创建一个空列,其中将标识"leap"
和"reg"
年
prd_df["leap"]<-NA
有条件循环的碱基识别
for(i in 1:length(prd_df$year)){
if((prd_df$year[i]%%4==0)&(prd_df$year[i]%%100!=0)){
prd_df$leap<-'leap'
}else if((prd_df$year[i]%%4==0)&(prd_df$year[i]%%100==0)&(prd_df$year[i]%%400==0)){
prd_df$leap<-'leap'
}else{
prd_df$leap<-'reg'
}
}
从结果数据框中创建一个表。
write.table(prd_df,
file = "prd.csv",
row.names = F, col.names = T,
sep = "\t")
这是我得到的:
"year" "leap"
2009 "reg"
2010 "reg"
2011 "reg"
2012 "reg"
2013 "reg"
2014 "reg"
2015 "reg"
2016 "reg"
2017 "reg"
在上面的示例中,第二列中应将2012和2016标识为"leap"
,但它不起作用。 作为其他代码的一部分,该条件以前已经可以正常工作,但是我现在无法使其正常工作。 可能无法将prd_df$year
识别为数字吗?
任何建议将不胜感激。
谢谢
我们可以用ifelse
prd_df$leap <- with(prd_df, ifelse(year %%4== 0 & year %%100 !=0, "leap", "reg"))
prd_df$leap
#[1] "reg" "reg" "reg" "leap" "reg" "reg" "reg" "leap" "reg"
或与case_when
从dplyr
library(dplyr)
prd_df %>%
mutate(leap = case_when(year %%4 == 0 & year %% 100 !=0 ~ "leap",
TRUE ~"reg"))
# year leap
#1 2009 reg
#2 2010 reg
#3 2011 reg
#4 2012 leap
#5 2013 reg
#6 2014 reg
#7 2015 reg
#8 2016 leap
#9 2017 reg
对于您的代码,将新值分配给列leaf
时,您错过了[i]
year<-(2009:2017)
prd_df<-data.frame(year)
prd_df["leap"]<-NA
for(i in 1:length(prd_df$year)){
if((prd_df$year[i]%%4==0)&(prd_df$year[i]%%100!=0)){
prd_df$leap[i]<-'leap'#add [i] here
}
else if((prd_df$year[i]%%4==0)&(prd_df$year[i]%%100==0)&(prd_df$year[i]%%400==0)){
prd_df$leap[i]<-'leap' #add [i] here
}else{
prd_df$leap[i]<-'reg'#add [i] here
}
}
prd_df
year leap
1 2009 reg
2 2010 reg
3 2011 reg
4 2012 leap
5 2013 reg
6 2014 reg
7 2015 reg
8 2016 leap
9 2017 reg
ifelse
多个条件
with(prd_df, ifelse(year %%4== 0 & year %%100 !=0, "leap", ifelse(year %%4== 0 & year %%100 !=0&year%%400==0,"leap","reg")))
[1] "reg" "reg" "reg" "leap" "reg" "reg" "reg" "leap" "reg"
尝试搜索lubridate软件包-我认为应该有功能来检查年份是否飞跃。 对于条件,请从dplyr软件包中使用mutate与case_when。
整个代码不应超过5行:)
library(dplyr)
library(lubridate)
year_df <- data_frame(year = 1999:2017)
year_df <- year_df %>%
mutate(leap = ifelse(leap_year(.$year), "leap", "reg"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.