R - 如果列值与字符向量中的任何值匹配,则返回其旁边的列

时间:2017-12-20 00:51:02

标签: r if-statement dataframe

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

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

我想在一个新栏目中做到这一点&#34; New&#34;如果&#34; ColumnA&#34;中的值匹配&#34;更改&#34;中的任何值,然后它给我&#34; ColumnB&#34;中的值,否则它返回&#34;列A&#34;中的值。

╔══════════╦════════════╦════════════╗
║ 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)
}
)

提前致谢。

1 个答案:

答案 0 :(得分:0)

试试这个:

# 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(...),则该列将包含因子编号。