将数据框中的列的行替换为R中的另一列

时间:2016-03-03 18:35:27

标签: r dataframe

让我有这样一个数据框(df):

DF:

header1   header2
------    -------
45        76
54        89
-         12
45        32
12        34
-         5
45        34
65        54

我想获得这样的数据帧

header1   header2
------    -------
45        76
54        89
-         -
45        32
12        34
-         -
45        34
65        54

即我想将header2 columsn中的值替换为“ - ”,列header1的哪些行具有“ - ”值。

我怎样才能在R中这样做?我会很高兴得到任何帮助。非常感谢。

2 个答案:

答案 0 :(得分:3)

如果您df的两列都是字符向量,则可以执行以下操作:

# You can convert your columns to character with
df[,1:2] <- lapply(df[,1:2], as.character) 

df$header2[df$header1 == "-"] <- "-" # Replace values
> df
#  header1 header2
#1      45      76
#2      54      89
#3       -       -
#4      45      32
#5      12      34
#6       -       -
#7      45      34
#8      65      54

答案 1 :(得分:1)

传统上,我建议使用dplyr,因为它在处理数据框时会产生美化可读的工作流程。

set.seed(1)
dta <- data.frame(colA = c(12,22,34,"-",23,"-"),
                  colB = round(runif(n = 6, min = 1, max = 100),0))

Vectorize(require)(package = c("dplyr", "magrittr"),
                                     character.only = TRUE)

dta %<>%
    mutate(colB = ifelse(colA == "-", "-", colA))

这会给你以下结果:

> head(dta)
  colA colB
1   12    2
2   22    3
3   34    5
4    -    -
5   23    4
6    -    -

旁注

这是一种非常灵活的机制,但如果您认为列类可能具有相关性,则可以在应用任何其他转换之前选择运行mutate_each(funs(as.character))