您能否幫我撰寫 R 中的代碼。我想派生一個可用值為 Yes 或 No 的新變數,但是它需要檢查字符變數 a1、a2、a3、a4 以及任何值為“yellow”的變數' 那么可用變數應該是yes else no。
a1 <- c('orange','red')
a2 <- c('red','yellow')
a3 <- c('black','orange')
a4 <- c('red','brown')
testa <- data.frame(a1,a2,a3,a4)

uj5u.com熱心網友回復:
dplyr
您可以使用rowwise和c_across:
testa %>%
rowwise() %>%
mutate(available = ifelse(any(c_across(a1:a4) == "yellow"), "yes", "no"))
a1 a2 a3 a4 available
<chr> <chr> <chr> <chr> <chr>
1 orange red black red no
2 red yellow orange brown yes
堿基R
使用apply:
testa$available <- apply(testa, 1, function(x) ifelse(any(x == "yellow"), "yes", "no"))
uj5u.com熱心網友回復:
a1 <- c('orange','red')
a2 <- c('red','yellow')
a3 <- c('black','orange')
a4 <- c('red','brown')
df <- data.frame(a1,a2,a3,a4)
library(tidyverse)
df %>%
mutate(available = ifelse(rowSums(. == "yellow") > 0, "yes", "no"))
#> a1 a2 a3 a4 available
#> 1 orange red black red no
#> 2 red yellow orange brown yes
library(data.table)
setDT(df)[, available := ifelse(rowSums(.SD == "yellow") > 0, "yes", "no")][]
#> a1 a2 a3 a4 available
#> 1: orange red black red no
#> 2: red yellow orange brown yes
由reprex 包(v2.0.1)于 2022-01-19 創建
uj5u.com熱心網友回復:
您可以連接每行中的單元格并"yellow"在結果字串中查找字符:
> grepl("yellow",paste(as.data.frame(t(testa))))
[1] FALSE TRUE
然后,您可以使用此生成的邏輯向量將標簽放入新列中:
testa$available = c("no","yes")[grepl("yellow",paste(as.data.frame(t(testa)))) 1]
這將導致data.frame:
> testa
a1 a2 a3 a4 available
1 orange red black red no
2 red yellow orange brown yes
(如果你想要"yes"不包含黃色的線條,只需在向量中翻轉它們c("no","yes"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/415716.html
標籤:
