我是一个绝对的R新手。我想要实现的是根据同一行中的字符串值是否包含标识符,将标识符添加到每个 Dataframe 行。
假设 Dataframe :
df <- data.frame(Code = c("DE8230", "18FR16", "2UK34", "45BE87C", "1894DE56", "AB12FR", "ES12456"),
Type = c("A", "B", "C", "C", "E", "A", "C"),
Value = c(12, 14, 8, 20, 21, 16, 5))
Code Type Value
1 DE8230 A 12
2 18FR16 B 14
3 2UK34 C 8
4 45BE87C C 20
5 1894DE56 E 21
6 AB12FR A 16
7 ES12456 C 5
我想根据"代码"列中是否存在标识符(例如DE、FR、UK、BE、ES)添加一个国家列,然后列出该国家。
我尝试了:
identifiers <- c("DE", "FR", "UK") #identifiers of choice
df <- mutate(df, country = 0)
for (i in 1:length(identifiers)){
df <- mutate(df,
country = ifelse(grepl(identifiers[i], Code), identifiers[i], country)
)
}
其结果为:
Code Type Value country
1 DE8230 A 12 DE
2 18FR16 B 14 FR
3 2UK34 C 8 UK
4 1894DE56 C 20 DE
5 AB12FR E 21 FR
虽然这是可行的,我认为一定有一个更优雅的解决方案,省略了for循环,只使用相同的dplyr语句。
注意:重要的是,所提到的标识符应列在单独的向量或列表中,而不是mutate语句的一部分。这只是一个假设的示例,数据集和标识符的数量要大得多。
1条答案
按热度按时间dohp0rv51#
我们可以通过
paste
将标识符作为带有|
分隔符的单个字符串使用str_extract
,并从"代码"中提取这些子字符串