R 跨列的条件值更改
我需要计算当一个值在0和1之间切换时,值分布在列之间,没有给定切换,并且存在NAs 我尝试了R 跨列的条件值更改,r,dplyr,mutate,rowsum,R,Dplyr,Mutate,Rowsum,我需要计算当一个值在0和1之间切换时,值分布在列之间,没有给定切换,并且存在NAs 我尝试了mutate和rowsumes,但几乎没有结果 例如: df <- data.frame(entry = c(1:5), year_1 = c(NA, NA, NA, 1, NA), year_2 = c(NA, NA, 0, 0, 1), year_3 = c(NA, 1, 1, 0, 1)) l要
mutate
和rowsumes
,但几乎没有结果
例如:
df <- data.frame(entry = c(1:5),
year_1 = c(NA, NA, NA, 1, NA),
year_2 = c(NA, NA, 0, 0, 1),
year_3 = c(NA, 1, 1, 0, 1))
l要计算跨列的更改,可以计算数据的“超前”和“滞后”版本(按列)之间的差异。获取差异为1的索引,并使用这些索引创建“开关”:
ix <- which(df[ , 3:ncol(df)] - df[ , 2:(ncol(df) - 1)] == 1, arr.ind = TRUE)
df$switch <- NA
df$switch[ix[ , 1]] <- paste0("year_", ix[ , 2])
df
# entry year_1 year_2 year_3 switch
# 1 1 NA NA NA <NA>
# 2 2 NA NA 1 <NA>
# 3 3 NA 0 1 year_2
# 4 4 1 0 0 <NA>
# 5 5 NA 1 1 <NA>
ix你的意思是c(不适用,不适用,“第二年”,不适用,不适用)
?这是因为在第3行中,您有一个从0到1的案例吗?我也不确定您想要的输出代表什么。你们能详细说明一下吗?我根据评论更新了这个问题。
l <- apply(df[, -1], 1, function(x)
names(df)[1 + which(tail(x, -1) == 1 & head(x, -1) == 0)])
unlist(ifelse(lengths(l), l, NA))
# [1] NA NA "year_2" NA NA
ix <- which(df[ , 3:ncol(df)] - df[ , 2:(ncol(df) - 1)] == 1, arr.ind = TRUE)
df$switch <- NA
df$switch[ix[ , 1]] <- paste0("year_", ix[ , 2])
df
# entry year_1 year_2 year_3 switch
# 1 1 NA NA NA <NA>
# 2 2 NA NA 1 <NA>
# 3 3 NA 0 1 year_2
# 4 4 1 0 0 <NA>
# 5 5 NA 1 1 <NA>