R列中的每一个更改都增加0.1
使用这个数据帧,我想为var1中的每个更改将var2增加0.1R列中的每一个更改都增加0.1,r,R,使用这个数据帧,我想为var1中的每个更改将var2增加0.1 df <- data.frame(var1=c("a", "a", "1", "0", "b", "b", "b", "c", "1", "1")) 我能够使用下面的代码为var1中的每个更改将var2增加1,但我无法将其操作为增加0.1 df$var2 <- c(0,cumsum(as.numeric(with(df,var1[1:(length(var1)-1)] != var1[2:length(var1)]))
df <- data.frame(var1=c("a", "a", "1", "0", "b", "b", "b", "c", "1", "1"))
我能够使用下面的代码为var1中的每个更改将var2增加1,但我无法将其操作为增加0.1
df$var2 <- c(0,cumsum(as.numeric(with(df,var1[1:(length(var1)-1)] != var1[2:length(var1)]))))
df$var2我们可以试试
df$var1 <- as.character(df$var1)
df$var2 <- seq(0, 1, by = 0.1)[with(df, cumsum(c(TRUE, var1[-1]!= var1[-length(var1)])))] + 1
df$var1您可以将此任务拆分为较小的任务,并按顺序完成它们
创建一行中“滞后”的列
比较这两列
计算累积总和,将其放入数据帧中
因此,在代码中:
helper=c(df$var1[1],df$var1[1:(nrow(df)-1)])
isDifferent=as.integer(df$var1)=helper
注意由于R将字符串创建为因子而转换为int
df$var2=1+cumsum(isDifferent*0.1)
这就成功了!谢谢你的帮助,我花了太长时间在这个上面挠头。
df$var1 <- as.character(df$var1)
df$var2 <- seq(0, 1, by = 0.1)[with(df, cumsum(c(TRUE, var1[-1]!= var1[-length(var1)])))] + 1