【问题标题】:R Replace special value of one column with value of another columnR用另一列的值替换一列的特殊值
【发布时间】:2018-07-18 01:52:48
【问题描述】:

我知道这可能是一个常见问题,但我找不到将代码应用于我的问题的好方法:

我有一个包含两个颜色列的数据集,我想用 colour.y 中的相应值替换颜色列的“未知”。有时 color 和 colour.y 列不匹配,但我仍然想保留 color 的值并替换未知数。

这里是例子:

   id  colour colour.y
1   1 unknown      red
2   2    blue     blue
3   2    blue     blue
4   3     red      red
5   4     red      red
6   4 unknown      red
7   4    blue     blue
8   5   green    green
9   5   green    green
10  5 unknown    green
11  6     red      red
12  6    blue     blue
13  6 unknown    green

这是代码:

id = c(1,2,2,3,4,4,4,5,5,5,6,6,6)
colour = c("unknown","blue","blue","red","red","unknown","blue","green","green","unknown","red","blue","unknown")
colour.y = c("red","green","blue","green","red","red","blue","blue","blue","green","red","blue","green")
data = data.frame(cbind(id,colour,colour.y))
data

提前致谢!

【问题讨论】:

    标签: r replace


    【解决方案1】:

    我们可以通过base R 做到这一点。根据“颜色”列中“未知”的出现创建逻辑向量。使用它来对 'colour' 和 'colour.y' 中的元素进行子集化,并将 'colour' 中的这些值替换为 'colour.y' 中的相应元素

    i1 <- data$colour == 'unknown'
    data$colour[i1] <- data$colour.y[i1]
    

    或者更好的选择是data.table。转换为data.table (setDT(data)) 后,使用逻辑条件指定i 并将'colour.y' 的值分配(:=) 给'colour'

    library(data.table)
    setDT(data)[colour == 'unknown', colour := colour.y]
    

    注意:最好为列使用character 类而不是factor(在data.frame 构造中使用stringsAsFactors = FALSE。如果我们真的需要factor 类,那么指定levels 以包含做作业之前的'colour.y'水平

    数据

    data <- data.frame(id,colour,colour.y, stringsAsFactors = FALSE)
    

    【讨论】:

      【解决方案2】:

      有基础R

      data$colour[which(data$colour=="unknown")]<-data$colour.y[which(data$colour=="unknown")]
      

      【讨论】:

        猜你喜欢
        • 2015-11-21
        • 2016-03-08
        • 2020-05-18
        • 1970-01-01
        • 1970-01-01
        • 2018-11-04
        • 2021-04-24
        • 2019-05-25
        • 1970-01-01
        相关资源
        最近更新 更多