我的目标是创建一个派生变量列
FinalScore
目前这是我的数据集。
#Number of rows in the dataset
n <- 100
#Generate random IDs
ids <- 1:n
#Generate random genders (male or female)
genders <- sample(c("male", "female"), n, replace = TRUE)
#Generate random groups (preschool or middle school)
groups <- sample(c("Bears", "CyHawks"), n, replace = TRUE)
#Generate random integers from 0 to 115
RawScore <- sample(0:115, n, replace = TRUE)
#Create a data frame with the generated data
df <- data.frame(ID = ids, Gender = genders, Group = groups, RawScore = RawScore )
#Create a column RawScore_new
tempdf <- data.table(cbind( RawScore = c(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48), RawScore_new = c(5.7,11.4,15.8,19.9,23.9,27.9,31.9,35.8,39.7,43.5,47.3,51,54.6,58,61.4,64.6,67.8,70.7,73.6,76.4,79.1,81.8,84.4,87.1,89.8,92.6,95.5,98.5,101.7,105.1,108.6,112.2,116,119.8,123.8,127.8,131.8,135.9,140,144.1,148.1,152.2,156.3,160.3,164.4,168.4,172.5,176.6,181.5)))
df <- df
df <- merge(df,
tempdf ,
by = "RawScore",
all.x = TRUE)
df$RawScore_new <- round(df$RawScore_new , 0)
我的目标是创建一个专栏
FinalScore
这样
如果
group = "Bears"
,则使用此查找表通过将 FinalScore
列中的值与 df$RawScore_new
列中的值进行匹配来创建
Bears_Lookup$RawScore_new
列
Bears_Lookup <- data.table(cbind(
RawScore_new = c(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17, 18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35
,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,
70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,
102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125
,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,
150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,
174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195),
FinalScore = c(34,34,35,35,35,36,36,37,37,37,38,38,39,39,39,40,40,40,41,41,42,42,42,43,43
,,44,44,44,45,45,45,46,46,47,47,47,48,48,49,49,49,50,50,51,51,51,52,52,52,53
,53,54,54,54,55,55,56,56,56,57,57,57,58,58,59,59,59,60,60,60,61,61,62,62,62
,,63,63,64,64,64,65,65,66,66,66,67,67,67,68,68,69,69,69,70,70,71,71,71,72,72
,72,73,73,74,74,74,75,75,76,76,76,77,77,77,78,78,79,79,79,80,80,81,81,81,82
,82,82,83,83,84,84,84,85,85,86,86,86,87,87,97,88,88,89,89,89,90,90,91,91,91
,92,92,92,93,93,94,94,94,95,95,96,96,96,97,97,97,98,98,99,99,99,100,100,101,101
,101,102,102,102,103,103,104,104,104,105,105,106,106,106,107,107,107,108,108,109,109)
))
如果
group = "CyHawks" and Gender ="Male"
,则使用此查找表通过将 FinalScore
列中的值与 df$RawScore_new
列中的值进行匹配来创建
CyHawks_Lookup_Male$RawScore_new
列
CyHawks_Lookup_Male <- data.table(cbind(
RawScore_new = c(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17, 18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35
,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,
70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,
102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125
,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,
150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,
174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195),
FinalScore = c(37,37,37,38,38,39,39,39,40,40,41,41,41,42,42,43,43,43,44,44,45,45,45,46,46
,47,47,47,48,48,49,49,49,50,50,51,51,51,52,52,53,53,53,54,54,55,55,55,56,56
,57,57,57,58,58,58,59,59,60,60,60,61,61,62,62,62,63,63,64,64,64,65,65,66,66
,66,67,67,68,68,68,69,69,70,70,70,71,71,72,72,72,73,73,74,74,74,75,75,76,76
,76,77,77,78,78,78,79,79,80,80,80,81,81,82,82,82,83,83,83,84,84,85,85,85,86
,86,87,87,87,88,88,89,89,89,90,90,91,91,91,92,92,93,93,93,94,94,95,95,95,96
,96,97,97,97,98,98,99,99,99,100,100,101,101,101,102,102,103,103,103,104,104,105,105,105,106
106,107,107,107,108,108,108,109,109,110,110,110,111,111,112,112,112,113,113,114,114)
))
如果
group = "CyHawks" and Gender ="Female"
,则使用此查找表通过将 FinalScore
列中的值与 df$RawScore_new
列中的值进行匹配来创建
CyHawks_Lookup_Female $RawScore_new
列
CyHawks_Lookup_Female <- data.table(cbind(
RawScore_new = c(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17, 18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35
,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,
70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,
102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125
,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,
150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,
174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195),
FinalScore = c(38,38,39,39,39,40,40,41,41,42,42,42,43,43,44,44,45,45,45,46,46,47,47,47,48
,48,49,49,50,50,50,51,51,52,52,53,53,53,54,54,55,55,55,56,56,57,57,58,58,58
,59,59,60,60,61,61,61,62,62,63,63,64,64,64,65,65,66,66,66,67,67,68,68,69,69
69,70,70,71,71,72,72,72,73,73,74,74,74,75,75,76,76,77,77,77,78,78,79,79,80
80,80,81,81,82,82,82,83,83,84,84,85,85,85,86,86,87,87,88,88,88,89,89,90,90
91,91,91,92,92,93,93,93,94,94,95,95,96,96,96,97,97,98,98,99,99,99,100,100,101
101,101,102,102,103,103,104,104,104,105,105,106,106,107,107,107,108,108,109,109,109,110,110,111,111
112,112,112,113,113,114,114,115,115,115,116,116,117,117,118,118,118,119,119,120,120)
))
我已经涉足
new <- df %>%
mutate(
FinalScore = case_when(
group == "Bears" ~ Bears_Lookup$FinalScore[match(unlist(new$RawScore_new), Bears_Lookup$RawScore_new)],
group = "CyHawks" & Gender ="Male" ~ CyHawks_Lookup_Male$FinalScore[match(unlist(new$RawScore_new), CyHawks_Lookup_Male$RawScore_new)],
group = "CyHawks" & Gender ="Female" ~ CyHawks_Lookup_Female$FinalScore[match(unlist(new$RawScore_new), CyHawks_Lookup_Female$RawScore_new)]
)
我遇到错误,不知道如何继续。因此,任何有关如何通过根据
FinalScore
和性别 RawScore_new
匹配查找表中Bears_Lookup , CyHawks_Lookup_Male,CyHawks_Lookup_Female
列中的值来创建派生变量 Group: Bears or Cyhawks
的建议都将受到高度赞赏。预先感谢。Male or Female
# Prepare Lookup tables for joining.
library(tidyverse)
Bears_Lookup <-
Bears_Lookup |> mutate(Group = "Bears")
CyHawks_Lookup <-
bind_rows(
CyHawks_Lookup_Male |> mutate(Group = "CyHawks", Gender = "Male"),
CyHawks_Lookup_Female |> mutate(Group = "CyHawks", Gender = "Female")
)
left_join()
FinalScore
清理 mutate()
。
coalesce()