簡體   English   中英

根據列更新名稱

[英]update names based on columns

我想根據兩列更新名稱

我的示例有 3 個原始列

df <- data.frame(name1 = c("a", "a", "a", "a", 'a', NA, NA, NA),
                 name2 = c("b", "b", "b", "b", "c", NA, NA, NA),
                 name3 = c("b", "b", "b", "b", "c", "a", "a", "a"))

df
  name1 name2 name3
1     a     b     b
2     a     b     b
3     a     b     b
4     a     b     b
5     a     c     c
6  <NA>  <NA>     a
7  <NA>  <NA>     a
8  <NA>  <NA>     a

我想更新name3列(甚至創建一個新列)說如果name1 == aname2 == NA ,那么name3中的a字符將被name2列中的b替換。

我想要的 output 之類的

  name1 name2 name3
1     a     b     b
2     a     b     b
3     a     b     b
4     a     b     b
5     a     c     c
6  <NA>  <NA>     b
7  <NA>  <NA>     b
8  <NA>  <NA>     b

到目前為止,我正在使用這個df %>% mutate(name3 = ifelse(name1 == "a" & is.na(name2), "b", name3)) ,但現在NA出現了。 對此有什么建議嗎?

我們可以用%in%替換==來消除 NA,因為 R 計算NA %in% x為 FALSE,但NA==x為 NA

df %>% mutate(name3 = ifelse(name1 %in% 'a' & is.na(name2), 'b', name3)) 

我們可以使用case_whenifelse語句:

library(dplyr)
df %>% 
  mutate(name3 = case_when(any(name1 %in% "a") &
                             is.na(name2) ~ "b",
                           TRUE ~ name3))

or:
df %>% 
  mutate(name3 = ifelse(any(name1 %in% "a") & 
                          is.na(name2), "b", name3))
        
  name1 name2 name3
1     a     b     b
2     a     b     b
3     a     b     b
4     a     b     b
5     a     c     c
6  <NA>  <NA>     b
7  <NA>  <NA>     b
8  <NA>  <NA>     b

基地 R

df$name3 <- ifelse(any(df$name1 == "a") & is.na(df$name2), "b", df$name3)

dplyr

library(dplyr)

df %>% 
  mutate(name3 = case_when(
    any(name1 == "a") & is.na(name2) ~ "b",
    TRUE ~ name3
  ))
#  name1 name2 name3
#1     a     b     b
#2     a     b     b
#3     a     b     b
#4     a     b     b
#5     a     c     c
#6  <NA>  <NA>     b
#7  <NA>  <NA>     b
#8  <NA>  <NA>     b

暫無
暫無

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

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