我需要帮助在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
正如您所看到的,它确实将我的绿色属性更改为紫色...但也更改了其相应的数字列。使用我的真实数据框,我还有许多其他必要的列,不能像这样更改。那么如何更改列中的属性名称而不影响其他列?
答案 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"
为空后。默认情况下,它选择数据集中的所有列,并使用,