作为具有如下数据结构的输入数据框:
dframe <- data.frame(id = c(1,2), col1 = c(4.2, 1.2), su = c(1.2,2.4))
如何比较两列的每一行中的数字,并根据最大的列产生一个新列,该列将具有最大的列名,而第二列具有该值?
dcom <- data.frame(id = c(1,2), col1 = c(4.2, 1.2), su = c(1.2,2.4), com = c("col1", "su"), com_num = c(4.2, 2.4))
dcom
id col1 su com com_num
1 1 4.2 1.2 col1 4.2
2 2 1.2 2.4 su 2.4
答案 0 :(得分:1)
矢量化的解决方案如下。
com_num <- with(dframe, pmax(col1, su))
i <- which(dframe[-1] == com_num, arr.ind = TRUE)
dframe$com <- names(dframe[-1])[i[, 2]]
dframe$com_num <- com_num
dframe
# id col1 su com com_num
#1 1 4.2 1.2 col1 4.2
#2 2 1.2 2.4 su 2.4