EGM*_*686 2 r recode tidyverse
我有一个具有以下结构的数据框:
id v1 v2 v3 v4 v5
1 . 1 . 2 3
2 1 2 3 . .
3 3 2 . 1 .
Run Code Online (Sandbox Code Playgroud)
我想像这样重新编码
id v1 v2 v3 v4 v5
1 0 3 0 2 1
2 3 2 1 0 0
3 1 2 0 3 0
Run Code Online (Sandbox Code Playgroud)
所以我想重新编码值 (1=3) (missing = 0) (3=1)
在 SPSS 中,这是相当直观的:
recode v1 to v5 (sysmis=0)(3=1)(1=3)(else=copy).
Run Code Online (Sandbox Code Playgroud)
我正在 R 中寻找类似的方法。对基本方法或 tidyverse 方法没有偏好。
替换.to NA,将列 ( ) 的类型转换type.convert为数字,减去 4 并将 替换NA为 0
df[df == "."] <- NA
df <- type.convert(df, as.is = TRUE)
df[-1] <- 4- df[-1]
df[is.na(df)] <- 0
Run Code Online (Sandbox Code Playgroud)
或者使用tidyverse
library(dplyr)
library(tidyr)
df %>%
mutate(across(-id, ~ replace_na(4 - as.numeric(.x), 0)))
Run Code Online (Sandbox Code Playgroud)
-输出
id v1 v2 v3 v4 v5
1 1 0 3 0 2 1
2 2 3 2 1 0 0
3 3 1 2 0 3 0
Run Code Online (Sandbox Code Playgroud)
-输出
> df
id v1 v2 v3 v4 v5
1 1 0 3 0 2 1
2 2 3 2 1 0 0
3 3 1 2 0 3 0
Run Code Online (Sandbox Code Playgroud)
df <- structure(list(id = 1:3, v1 = c(".", "1", "3"), v2 = c(1L, 2L,
2L), v3 = c(".", "3", "."), v4 = c("2", ".", "1"), v5 = c("3",
".", ".")), class = "data.frame", row.names = c(NA, -3L))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |