我正在嘗試使用有條件的但沒有找到一種簡單的方法來做到這一點。我在 As 列中有一個缺失值的資料集,我想創建一個新列 C,它為所有行取 A 中的原始值而不會丟失,對于缺失值的行,取另一列(B 列)的值。所有列都是字符變數。
一個 | 乙 |
---|---|
13 一個 1 | 15 A 2 |
15 A 2 | 15 A 2 |
不適用 | 15 一個 8 |
10 乙 3 | 15 A 2 |
不適用 | 15 一個 5 |
我想要的是:
一個 | 乙 | C |
---|---|---|
13 一個 1 | 15 A 2 | 13 一個 1 |
15 A 2 | 15 A 2 | 15 A 2 |
不適用 | 15 一個 8 | 15 一個 8 |
10 乙 3 | 15 A 2 | 10 乙 3 |
不適用 | 15 一個 5 | 15 一個 5 |
我嘗試了一個回圈,但結果并不令人滿意,
for(i in 1:length(df$A)) {
if(is.na(df$A[i])) {
df$C <- df$B
}
else {
df$C<- df$A
}
}
如果有人可以幫助我,在此先感謝
uj5u.com熱心網友回復:
一般來說,如果您發現自己在資料幀上回圈,可能有一個更有效的解決方案,或者使用 Jonathan 在他的答案中提供的矢量化函式,或者dplyr
如下使用。
我們可以檢查是否a
為NA
- 如果是,我們設定c
等于b
,否則保持為a
。
library(dplyr)
dat %>% mutate(c = if_else(is.na(A), B, A))
A B c
1 13 A 1 15 A 2 13 A 1
2 15 A 2 15 A 2 15 A 2
3 <NA> 15 A 8 15 A 8
4 10 B 3 15 A 2 10 B 3
5 <NA> 15 A 5 15 A 5
uj5u.com熱心網友回復:
df$C <- ifelse(is.na(df$A), df$B, df$A)
uj5u.com熱心網友回復:
我們可以使用coalesce
:
library(dplyr)
df %>%
mutate(c = coalesce(A, B))
A B c
1 13 A 1 15 A 2 13 A 1
2 15 A 2 15 A 2 15 A 2
3 <NA> 15 A 8 15 A 8
4 10 B 3 15 A 2 10 B 3
5 <NA> 15 A 5 15 A 5
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/491231.html
上一篇:使用方法C#簡化if陳述句