簡體   English   中英

組合兩個變量以創建新變量

[英]Combining two variables to create new variable

我想將兩個只有一個答案的變量組合成一個有兩個答案的變量。

例子

IPV_YES 僅具有 1 的答案 IPV_NO 僅具有 2 的答案

我想將它們組合成一個名為 IPV 的變量,該變量將具有來自兩個單獨類別的 1 和 2 結果。

我試過使用 ifelse 命令,但它只顯示了 IPV_YES 的值。

我擁有的數據集數據集

我想要的結果期望的結果

我們可以在將''轉換為NA后使用coalesce

library(dplyr)
df <- df %>%
    transmute(ID, IPV = coalesce(na_if(IPV_YES, ""), na_if(IPV_NO, ""))) %>%
    type.convert(as.is = TRUE)

數據

df <- data.frame(ID = 1:4, IPV_YES = c(1,"",1,""), IPV_NO = c("",2,"",2))

我的答案

df %>% mutate(across(everything(), ~ifelse(. == "", NA, as.numeric(.)))) %>%
  group_by(ID) %>% 
  rowwise() %>%
  transmute(IPV = sum(c_across(everything()), na.rm = T))

# A tibble: 4 x 2
# Rowwise:  ID
     ID   IPV
  <dbl> <dbl>
1     1     1
2     2     2
3     3     1
4     4     2

數據

df <- data.frame(ID = 1:4, IPV_YES = c(1,"",1,""), IPV_NO = c("",2,"",2))
df$IPV <- ifelse(df$IPV_YES != "", df$IPV_YES, df$IPV_NO[!df$IPV_NO==""])

在這里,我們指定一個ifelse語句; 可以這樣解釋:如果df$IPV_YES中的值為空,則給出df$IPV_YES中的值,否則給出df$IPV_NO中不為空的值。

如果要刪除IPV_*列:

df[,2:3] <- NULL

結果:

df
  ID IPV
1  1   1
2  2   2
3  3   1
4  4   2

數據:

df <- data.frame(ID = 1:4, IPV_YES = c(1,"",1,""), IPV_NO = c("",2,"",2))

也許你可以試試下面的代碼

replace(df, df == "", NA) %>%
  mutate(IPV = coalesce(IPV_YES, IPV_NO)) %>%
  select(ID, IPV) %>%
  type.convert(as.is = TRUE)

這使

  ID IPV
1  1   1
2  2   2
3  3   1
4  4   2

暫無
暫無

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

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