r - 具有多列的ifelse(适用)

时间:2018-04-09 17:07:13

标签: r if-statement apply tidyverse

我是了解apply世界的新手,当我开始理解这个概念时,应用程序出现问题。

我有多个列" Y"作为一个值,我想更改为列名的最后一个字母。

我想使用以下内容获取要将函数应用于的列列表:

flaggs2015 <- grep("Flag", names(ItemStats_2015))

这是我想用1列做的一个例子:

ItemStats_2015$Item_Flag_A <- ifelse(ItemStats_2015$Item_Flag_A == "Y", str_sub(flaggs2015[1], -1, -1), NA)

除此之外,显然我希望同时在名称中'Flag'的任何列上进行此操作。

以下是示例数据:

Item_ID Item_Flag_A     dummy column    Item_Flag_B     Item_Flag_C
54434   Y               red                         
85068                   green                           
85070   Y               purple                          Y       
85072                   orange                          
85074   Y               red                         
85078   Y               green                           
85080   Y               purple          Y           
85086                   orange                          
85088                   red                         

1 个答案:

答案 0 :(得分:1)

我坚持认为:

df <- data.frame(Item_ID = 1:3, Item_Flag_A = c("", "Y", ""), Dummy = 1:3, Item_Flag_B = c("Y", "", ""))
idx <- grep("Flag", names(df), value = T)

sapply(idx,  function(x) {
  df[, x] <<- ifelse(df[, x] == "Y", str_sub(x, -1, -1), NA)
})