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
我正在处理一个运动数据集,它位于一个包含两列的数据框中:比赛时间和赛事。该事件始终是几个选项之一(尝试、犯规、替换等...)。
我想按事件将事件拆分成新的列,因此想编写一个循环 "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