如何更改/重命名数据框列中的特定属性

时间:2016-01-26 15:38:30

标签: r attributes dataframe

我需要帮助在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

正如您所看到的,它确实将我的绿色属性更改为紫色...但也更改了其相应的数字列。使用我的真实数据框,我还有许多其他必要的列,不能像这样更改。那么如何更改列中的属性名称而不影响其他列?

1 个答案:

答案 0 :(得分:1)

语法应为

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

或者

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

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

, just concatenate it

注意:以上是测试用例。

在OP的代码中,未指定列,即在 df[df$cols=="green", c("col1", "col2")] <- "purple" 为空后。默认情况下,它选择数据集中的所有列,并使用,

替换逻辑索引中的行。