library(tidyverse)
library(magrittr)
df <- data.frame(year = c(1977:1981), set852 = c(1,1,0,0,0), set857=c(0,0,1,1,0), set874=c(0,0,0,1,1))
对于每个变量set852、set857等等(在真实数据集中是一个很长的列表),我想创建一个变量来指示时间序列中是否有变化(值将是"Start"、"End"和"No Change").其他变量应如下所示:
df_final <- data.frame(year = c(1977:1981), c852 = c("start","end","no change","no change","no change"), c857=c("no change","no change","start","end","no change"), c874=c("no change","no change","no change","start","end"))
我在tidyVerse中try 了这一点,使用了for-loop、mutic、Paste和case_When:
set_num <- as.integer(str_extract(colnames(df), "[0-9]+"))
for (i in 2:nrow(df))
{
df %<>% mutate(paste0("c", set_num[[i]]) = case_when(paste("set", set_num[[i]], sep="")==1 & year == 1977 ~ "start",
paste("set", set_num[[i]], sep="")==1 & lag(paste("set", set_num[[i]], sep=""))==0 ~ "start",
paste("set", set_num[[i]], sep="")==1 & lead(paste("set", set_num[[i]], sep=""))==0 ~ "end",
TRUE~"no change"))
}
然而,Mutations 后的粘贴函数不会被识别为函数,而是以"paste0"("c"...,依此类推)开头的变量名.如何获得将paste0函数注册为函数而不是字符串的代码?
编辑:人们似乎对什么是变化感到困惑.1-1-1-0-0的序列将是Start-nochange-end-nochange-nochange