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)))
选项 mutate
和 ifelse
:
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))
为了统计分析的目的,我想根据它们的值重新组合数据框中的一些行。
我有:
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)))
选项 mutate
和 ifelse
:
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))