【问题标题】:How to change a value in a column dependent on a grepl in R如何根据 R 中的 grepl 更改列中的值
【发布时间】:2016-03-07 02:48:57
【问题描述】:

我想根据我在 data.frame 中另一列的 grepl 中匹配的内容更改一列中的值。

Data.frame 示例:

df
SHOT    CLASS     DATA_TEXT
shot1   missed     missed Jumper
shot2   made       made Three Point Jumper
shot3   made       made Jumper 

我一直在尝试的:

df$SHOT_TYPE <- as.vector(0) #create new variable

for (i in 1:length(df)) {
if(grepl("e Jumper", df$DATA_TEXT[i]))  { df$SHOT_TYPE <- "Jumper" 
} else if(grepl("d Jumper", df$DATA_TEXT[i]))  { df$SHOT_TYPE <- "Jumper" 
} else if(grepl("t Jumper", df$DATA_TEXT[i]))  { df$SHOT_TYPE <- "Three" } }

每个if statement 执行此方法只会覆盖最后一个。

我目前的结果:

df
SHOT    CLASS    DATA_TEXT                 SHOT_TYPE
shot1   missed   missed Jumper             Three
shot2   made     made Three Point Jumper   Three
shot3   made     made Jumper               Three

我希望结果是什么样的:

df
SHOT    CLASS    DATA_TEXT                 SHOT_TYPE
shot1   missed   missed Jumper             Jumper
shot2   made     made Three Point Jumper   Jumper
shot3   made     made Jumper               Three

任何帮助将不胜感激。如果需要任何进一步的信息,请告诉我。

【问题讨论】:

    标签: r if-statement extract grepl


    【解决方案1】:

    这样的事情怎么样:

    df$SHOT_TYPE <- ifelse(grepl('d Jumper|t Jumper', df$DATA_TEXT), 'Jumper',
                           ifelse(grepl('e Jumper', df$DATA_TEXT), 'Three', NA))
    

    产生输出:

       SHOT  CLASS               DATA_TEXT SHOT_TYPE
    1 shot1 missed           missed Jumper    Jumper
    2 shot2   made made Three Point Jumper    Jumper
    3 shot3   made            made Jumper      Three
    

    注意:我将与三种模式不匹配的列编码为 NA。您可以修改代码以满足您的需要。

    【讨论】:

    • 感谢您的回答。如果我取出“或”并做两个单独的ifelse,那么效果很好。如果我留下“或”,那么它会将应该是Jumper 的镜头显示为NA
    • 您确定您正在使用 stringsAsFactors = FALSE 读取数据框吗?没有把握。这个对我有用。即使这样,您也可以嵌套另一个 ifelse() 以使用 grepl 中的“或”获得所需的结果。
    猜你喜欢
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多