簡體   English   中英

根據 R 中幾列的 TRUE/FALSE 創建新列

[英]Creating a new column based on TRUE/FALSE of several columns in R

我是 R 的新手,這是我的第一篇文章。 請幫幫我。

我有一個包含 10 列的數據集,如下所示:

紅色的 藍色的 綠色的
真的 錯誤的 錯誤的
真的 錯誤的 錯誤的
錯誤的 真的 錯誤的
錯誤的 錯誤的 真的

我想要一列應該如下所示:

顏色
紅色的
紅色的
藍色的
綠色的

'True' 應該讀入那種顏色。 給定行中的列中只有一個“真”。

我試過: df <- df %>% add_column(color=ifelse(.$col_name == TRUE,colnames(df)[1],"")

紅色的 藍色的 綠色的 col_1 col_2 col_3
真的 錯誤的 錯誤的 紅色的
真的 錯誤的 錯誤的 紅色的
錯誤的 真的 錯誤的 藍色的
錯誤的 錯誤的 真的 綠色的

因此創建了 10 個額外的列,希望以后合並它們。 但我被困住了。 有人可以幫忙嗎?

謝謝!

如果您有一個邏輯 dataframe:

cbind(df, col = names(df)[max.col(df1)])
    Red  Blue Green   col
1  True False False   Red
2  True False False   Red
3 False  True False  Blue
4 False False  True Green

另一方面,如果您有上述數據,則:

df1 <- df #THIS IS TO ENSURE YOU MAINTAIN YOUR ORIGINAL DATAFRAME
df1[]<-as.logical(as.matrix(df1))

cbind(df1, color = names(df)[max.col(df1)])

    Red  Blue Green color
1  TRUE FALSE FALSE   Red
2  TRUE FALSE FALSE   Red
3 FALSE  TRUE FALSE  Blue
4 FALSE FALSE  TRUE Green

如果復制數據很昂貴,那么:

cbind(df, col = names(df)[max.col(array(as.logical(unlist(df)), dim(df)))])

使用ifelse的基本 R 方法:

df$col_1 <- ifelse(df$Red, "Red", "")
df$col_2 <- ifelse(df$Blue, "Blue", "")
df$col_3 <- ifelse(df$Green, "Green", "")

這是tidyverse方法。

df = tibble(Red = c(T,T,F,F), Blue = c(F,F,T,F), Green = c(F,F,F,T))

方法 1: case_when ,一個向量化的多重 if - else。

df %>%
  mutate(color = case_when(Red ~ "Red",
                           Blue ~ "Blue",
                           Green ~ "Green"))

mutatetransmute交換以僅返回新的color列。
方法 2:使用列名屬性。

df %>%
  pivot_longer(everything(), names_to = "color") %>%
  filter(value) %>%
  select(color)

方法 3:子集列名

df %>%
  mutate(color = names(.)[apply(., 1, which)])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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