簡體   English   中英

基於多個列值創建因子

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM