R 使用其他变量添加新列

R 使用其他变量添加新列,r,dataframe,R,Dataframe,我想在基于球员和俱乐部名称的样本数据中添加一个名为“league”的新列。当然,我的数据库由一千条记录组成 我的数据框: df <- read.table(text= " Club Player 'Real Madrid CF' Ronaldo 'FC Barcelona' Messi 'FC Bayern München' Kross

我想在基于球员和俱乐部名称的样本数据中添加一个名为“league”的新列。当然,我的数据库由一千条记录组成

我的数据框:

df <- read.table(text= " Club       Player
                 'Real Madrid CF'     Ronaldo 
                 'FC Barcelona'       Messi 
                 'FC Bayern München'  Kross 
                 'Club Atlético de Madrid'  Torres
                 Juventus           Dybala
                 'Paris Saint-Germain'       Neymar",
                 header=TRUE)
df$League <- ifelse(df$Club == "Real Madrid CF", "Spain",
                     ifelse(df$Club == "FC Barcelona", "Spain",
                     ifelse(df$Club == "Club Atlético de Madrid", "Spain",       
                     ifelse(df$Club == "Juventus", "Italy","Germany"))))

df我们可以创建一个命名向量(“key/val”),然后通过将key与“Club”元素匹配来进行替换

df$League <- nm1[as.character(df$Club)]
df$League[is.na(df$League)] <- "Germany"

我将创建一个key/val数据帧或一个命名向量来替换它一次,而不使用任何
ifelse
,即
df2或
left\u join
库(dplyr);left_join(df,df2)%%>%mutate(League=replace(val,is.na(val),“Germany”)%%>%select(-val)
我不知道这是否是个好主意,因为我有很多数据,最好创建一个由俱乐部名称组成的向量,然后在俱乐部列中搜索,但我不知道如何做这取决于数据的大小。如果是40-60 gb左右,仍然
左联合
应该可以(假定内存不是限制)。但是,如果你有PB的数据,可能需要寻找其他工具。假设我有20个西班牙俱乐部,那么你不写20次西班牙的什么?@Elia是的,那只是一次写作。可能您可以使用
rep
复制字符串。无论如何,这比使用嵌套的ifelse要有效得多。顺便说一句,
ifelse
嵌套有一个限制。应该在53左右
nm1 <- structure(c("Spain", "Spain", "Spain", "Italy"), 
  .Names = c("Real Madrid CF", 
 "FC Barcelona", "Club Atlético de Madrid", "Juventus"))