我正在处理一个运动数据集,该数据集位于具有两个列的数据框中:比赛时间和赛事。该赛事始终是少数选项之一(尝试,犯规,换人等)。
我想按事件将事件分成新的列,因此想编写一个循环,说“如果[CELL]包含[“ event”]复制到列[3],否则写['']栏[3]”
我想我可以使用for循环以及ifelse和grepl函数来做到这一点。
现在我有以下内容
for (row in 1:nrow(match_data)){
ifelse((grepl("Attempt", match_data[row,2]), match_data[row,3] <- match_data[row,2] , match_data[row,3] <- '')
}
我想说的是对于每一行,如果match_data [row,column 2]包含“ attempt”,然后将match_data [row,column 3]设置为match_data [row,column 2]中的其他内容,否则将match_data [row ,第3列]到“。
由于将整数输入存在“ Attempt”的正确行中,因此代码可以正确执行测试。但是,看似输入的是随机整数,而不是匹配单元格中的文本。
我认为这可能与函数使用的数据类型有关,但是我在这里搜索了这个问题,看来我正在使用的函数可以与字符串一起使用,所以我看不出什么问题在这里发生吗?
谢谢!
答案 0 :(得分:0)
使用case_when易于阅读,编写和修改
install.packages("tidyverse")
library(tidyverse)
match_data %>%
mutate(newcol = case_when(event == "goal" ~ "goal"
, event == "own goal" ~ "goal"
, event == "goal" & time = "01:00" ~ "first goal" # just an example for multiple conditions
, TRUE ~ "no goal")) # else statement