R:根据对特定行的分组创建一个包含值的列
R: Create a column with values based on grouping specific rows
这是一个示例数据框,
ID <- c(101,102,103,201,202,203,301,302,303,401,402,403)
Point_A <- c(10,20,30,40,50,60,70,80,90,100,110,120)
df <- data.frame(ID,Point_A)
ID Point_A
1 101 10
2 102 20
3 103 30
4 201 40
5 202 50
6 203 60
7 301 70
8 302 80
9 303 90
10 401 100
11 402 110
12 403 120
我想在 df 中创建一个名为 Type 的列,其中包含 2 个值 A 和 B。
A 类组 (101,102,103,401,402,403) 一起和 B 类组 (201,202,203,301,302,303) 一起。
我想要的输出是
ID Point_A Type
1 101 10 A
2 102 20 A
3 103 30 A
4 401 100 A
5 402 110 A
6 403 120 A
7 201 40 B
8 202 50 B
9 203 60 B
10 301 70 B
11 302 80 B
12 303 90 B
注意顺序也变了。我只是知道如何做到这一点。请提出一些解决方法。
尝试
df$Type <- c('B', 'A')[(df$ID %in% c(101:103, 401:403))+1L]
或者
df$Type <- c('A', 'B')[(df$ID>103 & df$ID<401)+1L]
df <- df[order(df$Type),]
row.names(df) <- NULL
df
ID Point_A Type
1 101 10 A
2 102 20 A
3 103 30 A
4 401 100 A
5 402 110 A
6 403 120 A
7 201 40 B
8 202 50 B
9 203 60 B
10 301 70 B
11 302 80 B
12 303 90 B
更新
对于 3 个组,创建一个示例向量
v1 <- c(df$ID, c(501, 502, 503, 601, 602, 603))
c('A', 'B', 'C')[(v1 >103 & v1 <401)+ 2*(v1>=501)+1L]
#[1] "A" "A" "A" "B" "B" "B" "B" "B" "B" "A" "A" "A" "C" "C" "C" "C" "C" "C"
或者
library(car)
recode(v1, '101:103="A";401:403="A";201:303="B";else="C"')
#[1] "A" "A" "A" "B" "B" "B" "B" "B" "B" "A" "A" "A" "C" "C" "C" "C" "C" "C"
这是一个示例数据框,
ID <- c(101,102,103,201,202,203,301,302,303,401,402,403)
Point_A <- c(10,20,30,40,50,60,70,80,90,100,110,120)
df <- data.frame(ID,Point_A)
ID Point_A
1 101 10
2 102 20
3 103 30
4 201 40
5 202 50
6 203 60
7 301 70
8 302 80
9 303 90
10 401 100
11 402 110
12 403 120
我想在 df 中创建一个名为 Type 的列,其中包含 2 个值 A 和 B。 A 类组 (101,102,103,401,402,403) 一起和 B 类组 (201,202,203,301,302,303) 一起。
我想要的输出是
ID Point_A Type
1 101 10 A
2 102 20 A
3 103 30 A
4 401 100 A
5 402 110 A
6 403 120 A
7 201 40 B
8 202 50 B
9 203 60 B
10 301 70 B
11 302 80 B
12 303 90 B
注意顺序也变了。我只是知道如何做到这一点。请提出一些解决方法。
尝试
df$Type <- c('B', 'A')[(df$ID %in% c(101:103, 401:403))+1L]
或者
df$Type <- c('A', 'B')[(df$ID>103 & df$ID<401)+1L]
df <- df[order(df$Type),]
row.names(df) <- NULL
df
ID Point_A Type
1 101 10 A
2 102 20 A
3 103 30 A
4 401 100 A
5 402 110 A
6 403 120 A
7 201 40 B
8 202 50 B
9 203 60 B
10 301 70 B
11 302 80 B
12 303 90 B
更新
对于 3 个组,创建一个示例向量
v1 <- c(df$ID, c(501, 502, 503, 601, 602, 603))
c('A', 'B', 'C')[(v1 >103 & v1 <401)+ 2*(v1>=501)+1L]
#[1] "A" "A" "A" "B" "B" "B" "B" "B" "B" "A" "A" "A" "C" "C" "C" "C" "C" "C"
或者
library(car)
recode(v1, '101:103="A";401:403="A";201:303="B";else="C"')
#[1] "A" "A" "A" "B" "B" "B" "B" "B" "B" "A" "A" "A" "C" "C" "C" "C" "C" "C"