将所有列中的值转换为 tibble/dplyr 中的某个值
Converting the values in all columns to a certain value in tibble/dplyr
我有一个 tibble
对象,我想用一个值(例如 NA
或 0
)替换除某些列之外的所有列。我可以在没有管道 %>%
的情况下做到这一点,但是如何使用 %>%
做到这一点?
library(tibble)
dtf <- tibble(id = c('12', '22', '33', '40'),
x1 = c(0, 2, 3, 4),
a2 = c(1, 0, 3, 0),
c5 = c('a', 'b', 'c', 'd'))
# This raises an error:
dtf %>% select(-id) <- NA
Error in dtf %>% select(-id) <- NA : could not find function "%>%<-"
# This works:
dtf[, colnames(dtf) != 'id'] <- NA
dtf
# A tibble: 4 x 4
id x1 a2 c5
<chr> <lgl> <lgl> <lgl>
1 12 NA NA NA
2 22 NA NA NA
3 33 NA NA NA
4 40 NA NA NA
我想我应该使用 mutate()
或 mutate_all()
,但我想不出来。一个类似的 SO answer 为 NA
值提供了 na_if()
,但我无法让它适用于这种情况。
如果打算更新列,请使用 mutate_at
library(dplyr)
dtf <- dtf %>%
mutate_at(vars(-id), ~ NA)
如果我们需要替换成0
dtf <- dtf %>%
mutate_at(vars(-id), replace_na, 0)
取决于你想做什么。
- 以相同的方式改变所有变量并select name/place:
df %>%
mutate_at(.vars = c("x1","a2","c5"), funs(case_when(is.na(.) ~ 0,TRUE ~ .)))
# or
df %>%
mutate_at(.vars = -id, funs(case_when(is.na(.) ~ 0,TRUE ~ .)))
- 以相同的方式改变所有变量并select按类型:
df %>%
mutate_if(is.numeric, funs(case_when(is.na(.) ~ 0,TRUE ~ .)))
您只需一次性完成 dtf[,colnames(dtf) != "id"] <- NA
...这会将除 id
之外的所有列值替换为 NA
我有一个 tibble
对象,我想用一个值(例如 NA
或 0
)替换除某些列之外的所有列。我可以在没有管道 %>%
的情况下做到这一点,但是如何使用 %>%
做到这一点?
library(tibble)
dtf <- tibble(id = c('12', '22', '33', '40'),
x1 = c(0, 2, 3, 4),
a2 = c(1, 0, 3, 0),
c5 = c('a', 'b', 'c', 'd'))
# This raises an error:
dtf %>% select(-id) <- NA
Error in dtf %>% select(-id) <- NA : could not find function "%>%<-"
# This works:
dtf[, colnames(dtf) != 'id'] <- NA
dtf
# A tibble: 4 x 4
id x1 a2 c5
<chr> <lgl> <lgl> <lgl>
1 12 NA NA NA
2 22 NA NA NA
3 33 NA NA NA
4 40 NA NA NA
我想我应该使用 mutate()
或 mutate_all()
,但我想不出来。一个类似的 SO answer 为 NA
值提供了 na_if()
,但我无法让它适用于这种情况。
如果打算更新列,请使用 mutate_at
library(dplyr)
dtf <- dtf %>%
mutate_at(vars(-id), ~ NA)
如果我们需要替换成0
dtf <- dtf %>%
mutate_at(vars(-id), replace_na, 0)
取决于你想做什么。
- 以相同的方式改变所有变量并select name/place:
df %>%
mutate_at(.vars = c("x1","a2","c5"), funs(case_when(is.na(.) ~ 0,TRUE ~ .)))
# or
df %>%
mutate_at(.vars = -id, funs(case_when(is.na(.) ~ 0,TRUE ~ .)))
- 以相同的方式改变所有变量并select按类型:
df %>%
mutate_if(is.numeric, funs(case_when(is.na(.) ~ 0,TRUE ~ .)))
您只需一次性完成 dtf[,colnames(dtf) != "id"] <- NA
...这会将除 id
之外的所有列值替换为 NA