我有一個這樣的資料框:
其中我有一些分析單位以及在某些年份創建的區域百分比。我想要做的是創建一個選擇最高值并“告訴”我它屬于哪一年的列。例如,在 UA-1 中,26 是最高值,新列會告訴我這個分析單位是從 1985 年開始的。
但是,我想在這個“請求”中添加一些內容:只要大于 25,新列就會告訴我最高值屬于哪一年;否則,我自動需要它來指示 2005 年,如 UA-2 和 UA-3 中所示。所以在這個例子中,新列應該是這樣的:
我很感激任何建議。
uj5u.com熱心網友回復:
這是另一個解決方案
units_Of_Analysis <- c("UA-1", "UA-2", "UA-3")
y_1975 <- c(21, 10, 10)
y_1985 <- c(26, 15, 11)
y_1995 <- c(0, 19, 12)
y_2005 <- c(10, 8, 9)
df <- data.frame(units_Of_Analysis, y_1975, y_1985, y_1995, y_2005)
mat <- as.matrix(df[, -1])
col_Names <- colnames(mat)
my_Fun <- function(x, col_Names)
{
bool_Gt_25 <- x > 25
if(any(bool_Gt_25))
{
return(col_Names[which.max(x)])
}else
{
return("y_2005")
}
}
new_Col <- apply(X = mat, MARGIN = 1, FUN = function(x) my_Fun(x, col_Names))
df[["new_Col"]] <- new_Col
uj5u.com熱心網友回復:
library(tidyverse)
df <- data.frame(analysis = paste0("UA-", 1:3),
y1975 = c(21, 10, 10),
y1985 = c(26, 15, 11),
y1995 = c(0, 19, 12),
y2005 = c(10, 8, 9))
df %>%
rowwise() %>%
mutate(max_val = max(c_across(y1975:y2005)),
max_col = names(.[-1])[which.max(c_across(y1975:y2005))]) %>%
mutate(new_column = ifelse(max_val > 25, max_col, "y2005"))
# A tibble: 3 x 8
# Rowwise:
analysis y1975 y1985 y1995 y2005 max_val max_col new_column
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 UA-1 21 26 0 10 26 y1985 y1985
2 UA-2 10 15 19 8 19 y1995 y2005
3 UA-3 10 11 12 9 12 y1995 y2005
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/497350.html
上一篇:如何在R中再應用一個for回圈?
下一篇:將資料框轉換為行向量或長向量