【发布时间】:2018-02-11 22:35:53
【问题描述】:
我有一个如下数据框:
df <- data.frame(ID = c("X", "Y", "Z"), c("A/A", "B/B", "A/A"), c("D/D", "H/H", "B/B"))
我想按以下方式合并列,
如果第二列有“B/B”,请保留它。如果不是,则取第三列的值。
如何做到这一点?我希望最终输出只是数据框中的 ID 列和合并的第二列和第三列(作为单列)。
谢谢
【问题讨论】:
标签: r
我有一个如下数据框:
df <- data.frame(ID = c("X", "Y", "Z"), c("A/A", "B/B", "A/A"), c("D/D", "H/H", "B/B"))
我想按以下方式合并列,
如果第二列有“B/B”,请保留它。如果不是,则取第三列的值。
如何做到这一点?我希望最终输出只是数据框中的 ID 列和合并的第二列和第三列(作为单列)。
谢谢
【问题讨论】:
标签: r
# name the columns
names(df)[-1] <- letters[2:ncol(df)]
# create "merged" column with dplyr
require(dplyr)
df %>% mutate(newcol = replace(c, b == "B/B", "B/B")) %>% select(ID, newcol)
#create "merged" column with data.table
require(data.table)
setDT(df)
df[, .(ID, newcol = replace(c, b == "B/B", "B/B"))]
感谢 thelatemail 指出我不知何故错过的明显解决方案,它不需要包
cbind(df["ID"], newcol=replace(df$c, df$b == "B/B", "B/B"))
【讨论】:
cbind(df["ID"], newcol=replace(df$c, df$b == "B/B", "B/B"))