假設我有這個專欄。
dataframe$column<-c(1, 2, 2, 2, 3, 4, 4, 5, 5, 5, 6, 7, 8, 9, NA, NA, 0)
我得到了這個向量
vector<- c(1, 5, 9)
我需要在我的資料框中創建一個新列,當任何給定行中的值等于我的向量的任何值時,它將回傳 0。如果不相等,我想回傳一個 0,如果該列最初有一個 NA,我也想回傳一個 NA。
所以在我的例子中,新的列應該是這樣的:
[1] 1 0 0 0 0 0 0 1 1 1 0 0 0 1 NA NA 0
我很確定我可以用 apply 或 sapply 做到這一點,但我不太擅長回圈。
提前致謝。
uj5u.com熱心網友回復:
你可以做:
library(tidyverse)
dataframe <- data.frame(column = c(1, 2, 2, 2, 3, 4, 4, 5, 5, 5, 6, 7, 8, 9, NA, NA, 0))
vector<- c(1, 5, 9)
dataframe %>%
mutate(new_column = case_when(is.na(column) ~ NA_real_,
column %in% vector ~ 1,
TRUE ~ 0))
column new_column
1 1 1
2 2 0
3 2 0
4 2 0
5 3 0
6 4 0
7 4 0
8 5 1
9 5 1
10 5 1
11 6 0
12 7 0
13 8 0
14 9 1
15 NA NA
16 NA NA
17 0 0
uj5u.com熱心網友回復:
嘗試%in%
> replace( (x %in% v), is.na(x), NA)
[1] 1 0 0 0 0 0 0 1 1 1 0 0 0 1 NA NA 0
或outer rowSums
> (rowSums(outer(x, v, `==`)) > 0)
[1] 1 0 0 0 0 0 0 1 1 1 0 0 0 1 NA NA 0
資料
x <- c(1, 2, 2, 2, 3, 4, 4, 5, 5, 5, 6, 7, 8, 9, NA, NA, 0)
v <- c(1, 5, 9)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438469.html
下一篇:回圈串列R
