我的数据集包含四个数值变量 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)
我需要再创建两列:1) Max,和 2) Var
1)最大列:对于只有一个最大值的每一行,我需要将此“最大”值保存在 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
最佳答案
我们可以使用 max.col
获取每行中最大值的“Mydata”的列名(不包括“ID”列)。 ('Var'),以及每行的最大值 pmax
('最大限度')。为具有多个最大值 ('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))
关于r - 每行的最大值数量及更多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29683339/