R 中的数据清理:创建 "duplicates"
Data cleaning in R: creating "duplicates"
我得到了以下格式的数据集:
DF1 <- data.frame(
TakerId = c(1,4,7,10,13),
GiverId = c(3,2,11,4,10),
Col1= c(24,28,26,20,23),
Col2= c(37,31,38,35,39),
Col3= c(44,48,43,45,41)
)
DF1
TakerId GiverId Col1 Col2 Col3
1 3 24 37 44
4 2 28 31 48
7 11 26 38 43
10 4 20 35 45
13 10 23 39 41
我需要将前两列合并到一个必须称为 UserId 的列中(保留重复项)。
然后,应创建一个新列来指示每个 UserId 是 Taker 还是 Giver。
想要的输出:
UserId Role Col1 Col2 Col3
1 Taker 24 37 44
4 Taker 28 31 48
7 Taker 26 38 43
10 Taker 20 35 45
13 Taker 23 39 41
3 Giver 24 37 44
2 Giver 28 31 48
11 Giver 26 38 43
4 Giver 20 35 45
10 Giver 23 39 41
我们可以 gather
将 'Id' 列转换为 'long' 格式,然后从 'Role' 和 select
中剥离 'Id'想要的顺序中的列
library(tidyverse)
DF1 %>%
gather(Role, UserId, TakerId:GiverId) %>%
mutate(Role = str_sub(Role, 1, 5)) %>%
select(UserId, Role, Col1:Col3)
# UserId Role Col1 Col2 Col3
#1 1 Taker 24 37 44
#2 4 Taker 28 31 48
#3 7 Taker 26 38 43
#4 10 Taker 20 35 45
#5 13 Taker 23 39 41
#6 3 Giver 24 37 44
#7 2 Giver 28 31 48
#8 11 Giver 26 38 43
#9 4 Giver 20 35 45
#10 10 Giver 23 39 41
我得到了以下格式的数据集:
DF1 <- data.frame(
TakerId = c(1,4,7,10,13),
GiverId = c(3,2,11,4,10),
Col1= c(24,28,26,20,23),
Col2= c(37,31,38,35,39),
Col3= c(44,48,43,45,41)
)
DF1
TakerId GiverId Col1 Col2 Col3
1 3 24 37 44
4 2 28 31 48
7 11 26 38 43
10 4 20 35 45
13 10 23 39 41
我需要将前两列合并到一个必须称为 UserId 的列中(保留重复项)。
然后,应创建一个新列来指示每个 UserId 是 Taker 还是 Giver。
想要的输出:
UserId Role Col1 Col2 Col3
1 Taker 24 37 44
4 Taker 28 31 48
7 Taker 26 38 43
10 Taker 20 35 45
13 Taker 23 39 41
3 Giver 24 37 44
2 Giver 28 31 48
11 Giver 26 38 43
4 Giver 20 35 45
10 Giver 23 39 41
我们可以 gather
将 'Id' 列转换为 'long' 格式,然后从 'Role' 和 select
中剥离 'Id'想要的顺序中的列
library(tidyverse)
DF1 %>%
gather(Role, UserId, TakerId:GiverId) %>%
mutate(Role = str_sub(Role, 1, 5)) %>%
select(UserId, Role, Col1:Col3)
# UserId Role Col1 Col2 Col3
#1 1 Taker 24 37 44
#2 4 Taker 28 31 48
#3 7 Taker 26 38 43
#4 10 Taker 20 35 45
#5 13 Taker 23 39 41
#6 3 Giver 24 37 44
#7 2 Giver 28 31 48
#8 11 Giver 26 38 43
#9 4 Giver 20 35 45
#10 10 Giver 23 39 41