R - 如果满足条件,将单元格复制到新列

R - Copy cell to new column if condition met

我正在处理一个运动数据集,它位于一个包含两列的数据框中:比赛时间和赛事。该事件始终是几个选项之一(尝试、犯规、替换等...)。

我想按事件将事件拆分成新的列,因此想编写一个循环 "IF [CELL] contains ["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[行,第 2 列] 包含 "attempt",则将 match_data[行,第 3 列] 设置为任何内容match_data[行,第 2 列] 否则将 match_data[行,第 3 列] 设置为 ''。

代码正确执行测试,因为整数被输入到 'Attempt' 所在的正确行中。但是,输入的是看似随机的整数,而不是匹配单元格中的文本。

我认为这可能与函数处理的数据类型有关,但我在这里搜索了这个问题,我使用的函数似乎可以处理字符串,所以我看不到这里发生了什么问题?

提前致谢!

使用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