【问题标题】:Using the replace function to change value in R使用替换函数更改 R 中的值
【发布时间】:2014-10-15 07:03:58
【问题描述】:

replace () 帮助信息非常基础,不包含示例。 说我有以下

ages <- sample(40:80, 10, replace = T)
weights <- 100 + ages*.2 + rnorm(10, 0 , 20)
type <- sample(letters[1:3], 10, replace = T)
grouping <- data.frame(ages,weights,type)

可能看起来像

   ages   weights type
1    49  81.27546    c
2    71 116.50149    c
3    67 152.14525    b
4    45 135.75849    c
5    72 114.35790    a
6    46 110.36591    a
7    40 106.16965    c
8    77 126.09591    c
9    44 107.28003    a
10   69  96.06653    b

我想将第 9 行中的“类型”值从“a”更改为“z”。我曾尝试使用以下命令,但均未奏效

replace(grouping$type[9],values = "z")

grouping$type[9] <- z

【问题讨论】:

  • help(replace) 中有:“注意:x 不变:记得分配结果。”所以你不记得了。 R 是一种函数式语言。您需要分配函数的结果。
  • 您的替换行不起作用,因为您没有使用正确的语法replace(x, list, values)。第二行不起作用,因为您分配了一个未定义的表达式z。如果您在z 周围加上一组引号以使其成为一个字符;它仍然无法正常工作,因为您正试图向因子列 type 引入一个新级别。
  • 无需替换即可完成:grouping$type[grouping$type == 'a'] &lt;- 'z';你有什么理由要使用替换吗?
  • @rawr,他不能这样做,因为typefactor
  • 哦,是的,我应该检查一下我的选项设置

标签: r replace


【解决方案1】:

这样做可以解决你的问题

levels(grouping$type) <- c(levels(grouping$type), "z")  # adding new level "z"
grouping$type[9] <- "z"                                 # changing a to z 

【讨论】:

    【解决方案2】:

    或者您可以通过设置stringsAsFactors = FALSE 使data.frame 默认情况下不将您的character 类型变量转换为因子

    grouping <- data.frame(ages,weights,type, stringsAsFactors = FALSE)
    

    然后

    grouping$type[9] <- "z"
    

    会按预期工作

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2021-11-26
      • 2014-05-09
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多