簡體   English   中英

R-基於其他列的當前值的新列

[英]R- New column based on present values from other columns

我想基於任何其他列是否具有任何現值來創建數據框架列。

示例:創建列c取決於行的其余部分中是否存在任何現有值。

   age  bmi hyp chl  c
1    1   NA  NA  NA NA
2    2 22.7   1 187  1
3    1   NA   1 187  1
4    3   NA  NA  NA NA
5    1 20.4   1 113  1
6    3   NA  NA 184  1
7    1 22.5   1 118  1
8    1 30.1   1 187  1
9    2 22.0   1 238  1
10   2   NA  NA  NA NA
11   1   NA  NA  NA NA
12   2   NA  NA  NA NA
13   3 21.7   1 206  1
14   2 28.7   2 204  1
15   1 29.6   1  NA  1
16   1   NA  NA  NA NA
17   3 27.2   2 284  1
18   2 26.3   2 199  1
19   1 35.3   1 218  1
20   3 25.5   2  NA  1
21   1   NA  NA  NA NA
22   1 33.2   1 229  1
23   1 27.5   1 131  1
24   3 24.9   1  NA  1
25   2 27.4   1 186  1

列c使用以下代碼創建:

df <- transform(df, c=ifelse(!(is.na(bmi)) | !(is.na(hyp)) | !(is.na(chl)),1,NA))

我的問題是:如何在不指定列的情況下創建執行上述操作的函數。 即如果我有一個包含45列的數據集,我不想在ifelse語句中命名所有這些列。

提前謝謝了。

我們可以在邏輯矩陣上使用rowSums ,然后將其轉換為NA和1的vector

df$c <- NA^!rowSums(!is.na(df[-1]))
df$c
#[1] NA  1  1 NA  1  1  1  1  1 NA NA NA  1  1  1 NA  1  1  1  1 NA  1  1  1  1

我們也可以使用dplyr包中的coalesce函數。

dt2 <- dt %>%
  mutate_all(funs(as.numeric(.))) %>%
  mutate(c = coalesce(.$bmi, .$hyp, .$chl)) %>%
  mutate(c = ifelse(!is.na(c), 1, c))

dt2
   age  bmi hyp chl  c
1    1   NA  NA  NA NA
2    2 22.7   1 187  1
3    1   NA   1 187  1
4    3   NA  NA  NA NA
5    1 20.4   1 113  1
6    3   NA  NA 184  1
7    1 22.5   1 118  1
8    1 30.1   1 187  1
9    2 22.0   1 238  1
10   2   NA  NA  NA NA
11   1   NA  NA  NA NA
12   2   NA  NA  NA NA
13   3 21.7   1 206  1
14   2 28.7   2 204  1
15   1 29.6   1  NA  1
16   1   NA  NA  NA NA
17   3 27.2   2 284  1
18   2 26.3   2 199  1
19   1 35.3   1 218  1
20   3 25.5   2  NA  1
21   1   NA  NA  NA NA
22   1 33.2   1 229  1
23   1 27.5   1 131  1
24   3 24.9   1  NA  1
25   2 27.4   1 186  1

數據

dt <- read.table(text = "   age  bmi hyp chl
1    1   NA  NA  NA
                 2    2 22.7   1 187
                 3    1   NA   1 187
                 4    3   NA  NA  NA
                 5    1 20.4   1 113
                 6    3   NA  NA 184
                 7    1 22.5   1 118
                 8    1 30.1   1 187
                 9    2 22.0   1 238
                 10   2   NA  NA  NA
                 11   1   NA  NA  NA
                 12   2   NA  NA  NA
                 13   3 21.7   1 206
                 14   2 28.7   2 204
                 15   1 29.6   1  NA
                 16   1   NA  NA  NA
                 17   3 27.2   2 284
                 18   2 26.3   2 199
                 19   1 35.3   1 218
                 20   3 25.5   2  NA
                 21   1   NA  NA  NA
                 22   1 33.2   1 229
                 23   1 27.5   1 131
                 24   3 24.9   1  NA
                 25   2 27.4   1 186",
                 header = TRUE, stringsAsFactors = FALSE)

暫無
暫無

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

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