【问题标题】:How to change/rename specific attributes within a data frame column如何更改/重命名数据框列中的特定属性
【发布时间】:2016-02-07 17:25:04
【问题描述】:

我需要帮助更改/重命名 R 中数据框列中的属性。我可以非常接近我需要的内容,但我无法解决我的“解决方案”更改数据的方式。

这是一个虚拟数据框:

cols <- c("green", "green", "red", "blue", "black", "blue")
num <- c(1, 1, 2, 3, 4, 3)
df <- data.frame(cols, num)

df$cols <- as.character(df$cols)

> df
   cols num
1 green   1
2 green   1
3   red   2
4  blue   3
5 black   4
6  blue   3

假设我的数据中有一个错误,我的所有“绿色”属性都必须是“紫色”。这是我在 GIS StackExchange 上针对类似问题所建议的代码:

df[df$cols == "green", ] <- "purple"

> df
    cols    num
1 purple purple
2 purple purple
3    red      2
4   blue      3
5  black      4
6   blue      3

如您所见,它确实将我的绿色属性更改为紫色……但也更改了其对应的数字列。使用我的真实数据框,我有许多其他必要的列不能像这样更改。那么如何在不影响其他列的情况下更改列中的属性名称?

【问题讨论】:

    标签: r attributes dataframe


    【解决方案1】:

    语法应该是

     df$cols[df$cols=="green"] <- "purple"
    

    或者

     df[df$cols=="green", "cols"] <- "purple"
    

    在这两种情况下,我们都指定了列名。在第一种情况下,我们得到的逻辑索引(df$cols=="green" - 一个vector)可用于对“cols”(df$cols[df$cols=="green"])中的行进行子集化,然后将其分配给"purple"。当有多个列时,第二种情况可能更有用。如果我们说,两列,"col1","col2", just concatenate itc("col1", "col2")`(或指定列索引)

     df[df$cols=="green", c("col1", "col2")] <- "purple"
    

    注意:以上是一个测试用例。


    在 OP 的代码中,未指定该列,即在 , 之后它是空白的。默认情况下,它会选择数据集中的所有列,并将我们从逻辑索引中获得的行替换为"purple"

    【讨论】:

    • 在我的真实数据中,当我尝试第一个解决方案时,它会吐出错误Error in tz.finca$region[tz.finca$region == "Battambang", ] = "test" : incorrect number of subscripts on matrix。编辑:我误读了您的答案,并相信我现在已经明白了。非常感谢!
    • 我在这里尝试了 dat[dat$date== "2020-06-07_12h33.46.880", "participant"] stackoverflow.com/questions/62376988/…
    猜你喜欢
    • 2021-10-08
    • 2019-08-25
    • 2020-10-10
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多