[英]Create factor based on multiple column values
我正在嘗試創建一個新列(因子),以保存數據框中最大值的列名。 將其視為數據集中每個多邊形(行)的土壤類型的比例。 我想創建一個僅包含最高比例土壤名稱的新列。 例:
soil <- data.frame(soil1=c(0.75,0.25,0.25),soil2=c(0.25,0.75,0.75))
現在,我希望輸出如下所示:
soil$out <- c('soil1','soil2', 'soil2')
您可以使用apply
該問題:
soil$out <- names(soil)[apply(soil, 1, which.max)]
apply(soil, 1, which.max)
確定哪些列具有(第一個)最大值,然后將其傳遞給names(soil)
以確定相應的列名稱。
使用ifelse
因為它是矢量化的
soil$out <- ifelse(soil$soil1 > soil$soil2, "soil1", "soil2")
注意:如果您自己需要最大值(而不是列名),請使用pmax
(也將其向量化)
soil$out2 <-pmax(soil$soil1, soil$soil2)
不是最有效的方法
soil = data.frame(soil1=c(0.75,0.25,0.25),soil2=c(0.25,0.75,0.75))
#> soil
# soil1 soil2
#1 0.75 0.25
#2 0.25 0.75
#3 0.25 0.75
#Calculate max proportion for each row
soil.max<-apply(soil,1,max)
#soil.max
#[1] 0.75 0.75 0.75
#For each row, find the column index while matching with max proportion value calculated in previous step
soil$max.col<-sapply(1:nrow(soil),function(x) colnames(soil)[grep(soil.max[x],soil[x,])] )
soil
# soil1 soil2 max.col
#1 0.75 0.25 soil1
#2 0.25 0.75 soil2
#3 0.25 0.75 soil2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.