【问题标题】:R - if column value matches any value in character vector, return column beside it [duplicate]R - 如果列值与字符向量中的任何值匹配,则返回它旁边的列 [重复]
【发布时间】:2018-06-02 12:00:16
【问题描述】:

这里是 R 的新手,甚至是编码。我在数据帧“df”中有一个字符向量“更改”,它由我知道需要来自相邻列的输入的值组成。

change <- c("Apple","Bananas","Cheese")

如果“ColumnA”中的值与“change”中的任何值匹配,我想在新列“New”中设置它,然后它给我“ColumnB”中的值,否则它返回“Column”中的值一个”。

╔══════════╦════════════╦════════════╗
║ ColumnA  ║  ColumnB   ║    New     ║
╠══════════╬════════════╬════════════╣
║ Apples   ║ ApplesNew  ║ ApplesNew  ║
║ Beer     ║ BeerNew    ║ Beer       ║
║ Bananas  ║ BananasNew ║ BananasNew ║
║ Bananas  ║ BananasNew ║ BananasNew ║
║ Cheese   ║ CheeseNew  ║ CheeseNew  ║
╚══════════╩════════════╩════════════╝

我试过了:

within(df, {
    New <- ifelse(ColumnA %in% change, ColumnB, ColumnA)
}
)

提前致谢。

【问题讨论】:

    标签: r if-statement dataframe


    【解决方案1】:

    试试这个:

    # Your sample data
    change <- c("Apples","Bananas","Cheese");
        df <- cbind.data.frame(
        ColumnA = c("Apples", "Beer", "Bananas", "Bananas", "Cheese"),
        ColumnB = c("ApplesNew", "BeerNew", "BananasNew", "BananasNew", "CheeseNew")
    );
    
    within(df, { New = ifelse(ColumnA %in% change, as.character(ColumnB), as.character(ColumnA)) })
    #  ColumnA    ColumnB        New
    #1  Apples  ApplesNew  ApplesNew
    #2    Beer    BeerNew       Beer
    #3 Bananas BananasNew BananasNew
    #4 Bananas BananasNew BananasNew
    #5  Cheese  CheeseNew  CheeseNew
    

    如果您不使用as.character(...),则该列将包含因子编号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 2016-06-26
      • 2022-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      相关资源
      最近更新 更多