当前位置: 首页 > 知识库问答 >
问题:

如何将cross()函数与mutate()和case_when()结合起来,根据一个条件对多列中的值进行变异?

莫河
2023-03-14

我有人口统计数据集,其中包括一个家庭中的人的年龄。这是通过一项调查收集的,参与者可以拒绝提供他们的年龄。

结果是一个数据集,每行有一个家庭(每行有一个家庭ID代码),列中有各种家庭特征,如年龄。拒绝的响应编码为“R”,您可以使用下面的代码重新创建示例:

df <- list(Household_ID = c("1A", "1B", "1C", "1D", "1E"),
           AGE1 = c("25", "47", "39", "50", "R"),
           AGE2 = c("66", "23", "71", "R", "16"),
           AGE3 = c("28", "17", "R", "R", "80"),
           AGE4 = c("81", "22", "48", "59", "R"))

df <- as_tibble(df)

> df
# A tibble: 5 x 5
  Household_ID AGE1  AGE2  AGE3  AGE4 
  <chr>        <chr> <chr> <chr> <chr>
1 1A           25    66    28    81   
2 1B           47    23    17    22   
3 1C           39    71    R     48   
4 1D           50    R     R     59   
5 1E           R     16    80    R 

df <- df %>% mutate(AGE1 = case_when(AGE1 == "R" ~ "-9", TRUE ~ as.character(AGE1)))
df <- df %>% mutate(AGE2 = case_when(AGE2 == "R" ~ "-9", TRUE ~ as.character(AGE2)))
df <- df %>% mutate(AGE3 = case_when(AGE3 == "R" ~ "-9", TRUE ~ as.character(AGE3)))
df <- df %>% mutate(AGE4 = case_when(AGE4 == "R" ~ "-9", TRUE ~ as.character(AGE4)))
df <- df %>%
  mutate(across(AGE1:AEG4),
          ~ (case_when(. == "R" ~ "-9")))
Error: Problem with `mutate()` input `..2`.
x Input `..2` must be a vector, not a `formula` object.
i Input `..2` is `~(case_when(. == "R" ~ "-9"))`.

编辑:已解决!

df <- df %>%
  mutate(across(AGE1:AGE4, ~ (case_when(.x == "R" ~ "-9", TRUE ~ as.character(.x)))))

共有1个答案

金高飞
2023-03-14

为什么不简单呢?

df[,2:5][df[, 2:5] == 'R'] <- '-9'

# A tibble: 5 x 5
  Household_ID AGE1  AGE2  AGE3  AGE4 
  <chr>        <chr> <chr> <chr> <chr>
1 1A           25    66    28    81   
2 1B           47    23    17    22   
3 1C           39    71    -9    48   
4 1D           50    -9    -9    59   
5 1E           -9    16    80    -9
 类似资料:
  • 在dplyr工作流中,当newvar==0时,我尝试在dataframe的每一列中的newvar列后粘贴一个0,否则不做任何操作。我修改了iris数据集: null

  • 我想创建一个双变量映射,绘制两个变量:和。为了给部分数据提供正确的颜色,我想为一个变量添加一列颜色代码和另一个变量。然后再将两者连接起来。这样就可以像下面的示例那样对数据进行编码: 下面是我的示例df和失败代码: 有了这些结果...: 我是新的与mutate的结合,希望有人能帮助我。

  • 我有一个在不同医院接受治疗的病人的数据集(仅限于住院病人),其中一些分析揭示了几个不一致之处。其中之一是--软件允许病人在不关闭他们之前开放的的情况下入院。 为了更好地理解它,让我们考虑一下示例数据集 如果我们在上面的数据中看到,id为1的患者于1月1日在hospital_1(row-1)入院,并于1月14日出院。出院前患者再次在同一医院入院(第2行);在1月15日(第2行)结束这四项记录之前,再

  • 最近没有使用当前tidyverse动词来回答这个问题(R 4.1 所需的输出应如下所示。感谢您对此的任何帮助!

  • 主要方法 但当我尝试合并这两个地图时,我得到的是空地图。实际上,我需要有一个地图与三个键(印度,英国,美国)和他们的值,从多个地图列表合并W.R.T键。