我的数据集包含四个数值变量X1,X2,X3,X_4和一个ID列.
ID <- c(1,2,3,4,5,6,7,8,9,10)
X1 <- c(3,1,1,1,2,1,2,1,3,4)
X2 <- c(1,2,1,3,2,2,4,1,2,4)
X3 <- c(1,1,1,3,2,3,3,2,1,4)
X4 <- c(1,4,1,1,1,4,3,1,4,4)
Mydata <- data.frame(ID, X1,X2,X3,X4)
Run Code Online (Sandbox Code Playgroud)
我需要再创建两列:1)Max,和2)Var
1)最大列:对于每个只有一个最大值的行,我需要在Max变量中保存这个"max"值.如果行有多个,则Max值应为999.
2)Var列:对于只有一个最大值的行,我需要知道它是X1,X2,X3 $还是X4.
对于上面的数据集,这是输出:
ID X1 X2 X3 X4 Max Var
1 3 1 1 1 3 X1
2 1 2 1 4 4 X4
3 1 1 1 1 999 NA
4 1 3 3 1 999 NA
5 2 2 2 1 999 NA
6 1 2 3 4 4 X4
7 2 4 3 3 4 X2
8 1 1 2 1 2 X3
9 3 2 1 4 4 X4
10 4 4 4 4 999 NA
Run Code Online (Sandbox Code Playgroud)
我们可以使用max.col('Var')获取每行(不包括'ID'列)的最大值'Mydata'的列名,以及每行的最大值pmax('Max').为具有多个最大值('indx')的行创建逻辑索引,并使用它ifelse来获取预期输出.
Var <- names(Mydata[-1])[max.col(Mydata[-1])]
Max <- do.call(pmax,Mydata[-1])
indx <- rowSums(Mydata[-1]==Max)>1
transform(Mydata, Var= ifelse(indx, NA, Var), Max=ifelse(indx, 999, Max))
Run Code Online (Sandbox Code Playgroud)