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

时间:2018-08-23 22:11:35

标签: r grepl

我正在处理一个运动数据集,该数据集位于具有两个列的数据框中:比赛时间和赛事。该赛事始终是少数选项之一(尝试,犯规,换人等)。

我想按事件将事件分成新的列,因此想编写一个循环,说“如果[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”的正确行中,因此代码可以正确执行测试。但是,看似输入的是随机整数,而不是匹配单元格中的文本。

我认为这可能与函数使用的数据类型有关,但是我在这里搜索了这个问题,看来我正在使用的函数可以与字符串一起使用,所以我看不出什么问题在这里发生吗?

谢谢!

1 个答案:

答案 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