r - 使用R中for循环中的if语句将一组字符串折叠成一个字符串

标签 r for-loop if-statement

我有一个带有“食物”列的数据框。

dataframe <- data.frame(Color = c("red","red","red","red","red","blue","blue","blue","blue","blue","green","green","green","green","green","orange","orange","orange","orange","orange"), 
Food = c("banana","apple","potato","orange","egg","strawberry","cheese","yogurt","kiwi","butter","kale","sugar","carrot","celery","radish","cereal","milk","blueberry","squash","lemon"), Count = c(2,5,4,8,10,7,5,6,9,11,1,8,5,3,7,9,2,3,6,4))

每次出现水果时,我都想用“水果”替换水果的名称。

我试过制作水果名称的向量。然后我遍历数据框中的每一行,在字符串与水果匹配的地方,我想用“水果”替换水果名称。
fruit_list <- c("banana","apple","orange","strawberry","kiwi","blueberry","lemon")

for (r in 1:nrow(dataframe)) {
  for (i in 1:length(fruit_list)){
    if (length(grep(fruit_list[i], dataframe$Food[r])) != 0) { 
      dataframe$Food[r] <- paste("fruit") 
    }
  }
}

我如何使用这种通用格式,以便 dataframe$Food 不只是以 NA 填充?

最佳答案

dplyr :

  library(dplyr)
    ataframe %>% 
      mutate(Food=as.character(Food),
             Food=ifelse(Food%in%fruit_list,"Fruit",Food))#can change to fruit

结果:
 Color   Food Count
1     red  Fruit     2
2     red  Fruit     5
3     red potato     4
4     red  Fruit     8
5     red    egg    10
6    blue  Fruit     7
7    blue cheese     5
8    blue yogurt     6
9    blue  Fruit     9
10   blue butter    11
11  green   kale     1
12  green  sugar     8
13  green carrot     5
14  green celery     3
15  green radish     7
16 orange cereal     9
17 orange   milk     2
18 orange  Fruit     3
19 orange squash     6
20 orange  Fruit     4

关于r - 使用R中for循环中的if语句将一组字符串折叠成一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55637238/

相关文章:

r - aes里面的函数

r - 在R中,如何访问因子每个级别的第一个元素?

html - Jekyll 和 Liquid for 循环

Java:为什么 else 语句总是在我的 while 循环中运行?

使用向量替换行子集的列值

r - 如何修复R的错误 “missing value where TRUE/FALSE needed”?

batch-file - 循环遍历批处理文件中的 ASCII 代码

python - 如何检查 JSON 数组中是否存在值并继续循环

javascript - If 条件推送包含/匹配字符串的值

Javascript 条件运算符没有按我想象的方式运行