首页 > 解决方案 > 用列中的整数替换单元格中的值

问题描述

如果我有如下数据框:

ID 风险 种A 种B 种C 种D 种E 种F
一个 40 不适用 不适用 文本1 不适用 不适用 文本2
12 不适用 文本3 不适用 不适用 文本4 不适用
C 65 不适用 不适用 不适用 文本5 不适用 文本6

如何以编程方式将每行中出现的“文本”值替换为“风险”列中的值(在每种情况下它们可能是不同的词),以便获得以下信息?

ID 风险 种A 种B 种C 种D 种E 种F
一个 40 不适用 不适用 40 不适用 不适用 40
12 不适用 12 不适用 不适用 12 不适用
C 65 不适用 不适用 不适用 65 不适用 65

标签: rdataframereplacedplyr

解决方案


你可以试试下面的代码

df[-(1:2)] <- t(apply(df, 1, function(v) replace(v, !is.na(v), v["risk"])))[, -(1:2)]

这使

> df
  id risk speciesA speciesB speciesC speciesD speciesE speciesF
1  A   40     <NA>     <NA>       40     <NA>     <NA>       40
2  B   12     <NA>       12     <NA>     <NA>       12     <NA>
3  C   65     <NA>     <NA>     <NA>       65     <NA>       65

数据

> dput(df)
structure(list(id = c("A", "B", "C"), risk = c(40L, 12L, 65L),
    speciesA = c(NA, NA, NA), speciesB = c(NA, "text3", NA),
    speciesC = c("text1", NA, NA), speciesD = c(NA, NA, "text5"
    ), speciesE = c(NA, "text4", NA), speciesF = c("text2", NA,
    "text6")), class = "data.frame", row.names = c(NA, -3L))

推荐阅读