我正在从SAS过渡到R并遇到一些困难"感觉"语言。
拥有以下数据集:
Key var1 var2 var3 var4 res1 res2 res3 res4
1 1 2 3 4 100 121 34565 4345
2 2 1 4 3 200 56 345 345
3 4 3 2 1 100 34 3 6
4 1 4 1 2 100 3 2 43
5 1 4 4 2 400 6 34 3
structure(list(Key = 1:5, var1 = c(1L, 2L, 4L, 1L, 1L), var2 = c(2L,
1L, 3L, 4L, 4L), var3 = c(3L, 4L, 2L, 1L, 4L), var4 = c(4L, 3L,
1L, 2L, 2L), res1 = c(100L, 200L, 100L, 100L, 400L), res2 = c(121L,
56L, 34L, 3L, 6L), res3 = c(34565L, 345L, 3L, 2L, 34L), res4 = c(4345L,
345L, 6L, 43L, 3L)), .Names = c("Key", "var1", "var2", "var3",
"var4", "res1", "res2", "res3", "res4"), class = "data.frame", row.names = c(NA, -5L))
其中var1
- var4
例如是time(var1 - Jun, var2-Jul,
等差异点的信用数量)
数组res1-res4也是如此,但它是一个数量。
我想做的是:
我设法做的第一项任务:
varArray<-c("var1","var2","var3","var4")
d$first4<- apply(d[varArray],1,match,x=4)
其中&#34; d&#34;是上面提到的数据框导入。
第二项任务现在对我来说是一个阻碍。我不知道如何根据变量值开始查看列表中的元素。
答案 0 :(得分:1)
第一项任务
varNames <- grep("var", colnames(d))
indx <- max.col(d[, varNames], "first")
indx
#[1] 4 3 1 2 2
第二项任务
indx1 <- max.col(df[, varNames]==1, "last")
indx2 <- ifelse(indx1>indx, indx1, NA)
indx2
#[1] NA NA 4 3 NA
第3项任务
resNames <- grep("res", colnames(d))
d1 <- d[, resNames]
d1[cbind(seq_along(indx), indx)]
#[1] 4345 345 100 3 6
d1[cbind(seq_along(indx2), indx2)]
#[1] NA NA 6 2 NA
d <- structure(list(Key = 1:5, var1 = c(1L, 2L, 4L, 1L, 1L), var2 = c(2L,
1L, 3L, 4L, 4L), var3 = c(3L, 4L, 2L, 1L, 4L), var4 = c(4L, 3L,
1L, 2L, 2L), res1 = c(100L, 200L, 100L, 100L, 400L), res2 = c(121L,
56L, 34L, 3L, 6L), res3 = c(34565L, 345L, 3L, 2L, 34L), res4 = c(4345L,
345L, 6L, 43L, 3L), first4 = c(4L, 3L, 1L, 2L, 2L)), .Names = c("Key",
"var1", "var2", "var3", "var4", "res1", "res2", "res3", "res4",
"first4"), row.names = c(NA, -5L), class = "data.frame")
答案 1 :(得分:0)
这是一种在4次出现后找到1的出现指数的方法:
df1 <- df[varArray] == 1 * (t(apply(df[varArray] == 4, 1, cumsum)) > 0)
bar <- function(x) ifelse(length(x) == 0, NA, x)
sapply((apply(df1, 1, which)), bar)
#[1] NA NA 4 3 NA
我不确定你的意思是'来自res1-res4的金额基于客户达到4个学分和之后1个学分的时刻'。这个数字是否以某种方式加权来自任务1)和2)的指数之间的差异?