R中数据框内的部分分组

Partial grouping inside a dataframe in R

为了统计分析的目的,我想根据它们的值重新组合数据框中的一些行。

我有:

number latitude
30 57
12 59
01 68
12 66
101 55
47 61
05 60
288 67

例如,所需的输出是将 66 以上的每个纬度 (66+67+68) 重新组合到一个 66+ 类别中,所需的输出将如下所示:

number latitude new
30 57 57
12 59 59
01 68 66+
12 66 66+
101 55 55
47 61 61
05 60 60
288 67 66+

我不想使用 if 循环,因为我觉得它对 R 不太友好。 我也想保留初始列,这样我以后可以尝试不同的组合。

非常感谢。

我们可以使用

df1$new <- df1$latitude
df1$new[df1$latitude >=66] <- "66+"

ifelse

df1$new <- with(df1, ifelse(latitude >=66, "66+", latitude))

-输出

> df1
  number latitude new
1     30       57  57
2     12       59  59
3      1       68 66+
4     12       66 66+
5    101       55  55
6     47       61  61
7      5       60  60
8    288       67 66+

此外,正如@Mael 对 'new' 列类型的评论,如果我们想保留类型,也可以使用 pmin

library(dplyr)
df1 %>%
    mutate(new = pmin(latitude, 66))
   number latitude new
1     30       57  57
2     12       59  59
3      1       68  66
4     12       66  66
5    101       55  55
6     47       61  61
7      5       60  60
8    288       67  66
library(tidyverse)

tribble(~"number",  ~"latitude",
        30, 57,
        12, 59,
        01, 68,
        12, 66,
        101,55,
        47, 61,
        05, 60,
        288,67) %>% 
  dplyr::mutate(
    new = if_else(latitude > 66,
                  "66+",
                  as.character(latitude)))

选项 mutateifelse:

library(dplyr)
df %>%
  mutate(new = ifelse(latitude >= 66, "66+", latitude))

输出:

  number latitude new
1     30       57  57
2     12       59  59
3     01       68 66+
4     12       66 66+
5    101       55  55
6     47       61  61
7     05       60  60
8    288       67 66+

数据

df <- data.frame(number = c("30","12","01","12","101","47","05","288"),
                 latitude = c(57,59,68,66,55,61,60,67))