我试图在数据集中创建一个新列,并根据另一列中的值用文本填充该列。该数据不仅包含ST。还有其他职位,但这只是我正在测试的职位。
我一直在尝试通过在FOR循环中使用IF语句来实现此目的
当前数据(不仅只有一个人,这是我正在测试的玩家)
short_name team_position position_group
J. Obika ST NA
D. Payet LW NA
D. Luiz CB NA
下面是我希望数据显示的样子
short_name team_position position_group
J. Obika ST FORWARD
D. Payet LW FORWARD
D. Luiz CB DEFENDER
下面是我尝试的一些代码
for(i in 1:length(fifa20datasample$team_position)){
if(fifa20datasample$team_position[i] == 'ST'){
fifa20datasample$position_group[i] == "FORWARD"
}
}
if(fifa20datasample $ team_position [i] ==“ ST”){时出错 需要TRUE / FALSE的值
for(i in 1:length(fifa20datasample$team_position)){
if(fifa20datasample$team_position[i] == "ST"){
fifa20datasample$position_group[i] == "FORWARD"
}
}
if(fifa20datasample $ team_position [i] ==“ ST”){时出错 需要TRUE / FALSE的值
for(i in 1:length(fifa20datasample$team_position)){
if(class(fifa20datasample$team_position[i]) == 'ST'){
fifa20datasample$position_group[i] == "FORWARD"
}
}
这不会执行任何操作,也不会显示错误
for(i in 1:length(fifa20datasample$team_position)){
if(class(fifa20datasample$team_position[i]) == "ST"){
fifa20datasample$position_group[i] == "FORWARD"
}
}
这不会执行任何操作,也不会显示错误
for(i in 1:length(fifa20datasample$team_position)){
if(fifa20datasample$team_position[i] == 'ST'){
fifa20datasample$position_group[i] <- "FORWARD"
}
}
答案 0 :(得分:1)
case_when确实很有帮助。它将您遇到的许多迭代问题抽象化。
您提供的样本只有一个球员和一个位置,我在示例中添加了更多选项,以便您可以真正轻松地覆盖所有其他位置。
case_when通过检查数据框并允许您针对某一列检查条件并根据该条件修改同一行中的列来进行工作。
https://dplyr.tidyverse.org/reference/case_when.html
library(tibble)
library(dplyr)
fifa20datasample <- tibble(
short_name = 'J. Obika',
team_position = 'ST',
position_group = NA
)
fifa20datasample %>%
mutate(
position_group = case_when(
team_position %in% c('ST', 'LW') ~ 'FORWARD',
team_position %in% c('CAM', 'CM') ~ 'MIDFIELD',
team_position %in% c('CB') ~ 'DEFENDER',
team_position %in% c('GK') ~ 'GOALKEEPER'
)
)
short_name team_position position_group
<chr> <chr> <chr>
1 J. Obika ST FORWARD