【问题标题】:Replacing rows of a column in a dataframe conditional to another column in R [duplicate]将数据框中列的行替换为R中的另一列[重复]
【发布时间】:2016-03-04 05:53:50
【问题描述】:

让我有这样一个数据框(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 列中的值替换为“-”,列 header1 的哪些行具有“-”值。

如何在 R 中做到这一点?我会很高兴得到任何帮助。非常感谢。

【问题讨论】:

  • 能否请您添加str(df) 的输出,以便我们查看您的数据框的结构?这可能会影响用于获得所需结果的代码。

标签: r dataframe


【解决方案1】:

如果你的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

【讨论】:

    【解决方案2】:

    传统上,我建议使用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))

    【讨论】:

      猜你喜欢
      • 2019-04-03
      • 2019-03-23
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 2020-09-01
      • 2016-07-24
      相关资源
      最近更新 更多