在一条语句中重命名多个字段值

标签 r

我知道可以执行以下操作:

df$V1[df$V1 == "Y"] <- 1

将任何等于“Y”的值重命名为 1。但是,如果我想要将等于“N”的值更改为 0,该怎么办?

我尝试过这样做:

df$V1[df$V1 == c("Y","N")] <- c(1,0)

但我收到警告

longer object is not a multiple of shorter object

这导致并非所有与大小写定义匹配的值都被转换。

有什么方法可以做到这一点?

最佳答案

这就是您的代码不起作用的原因

df$V1[df$V1 == c("Y","N")] <- c(1,0)

要求 R 匹配 V1 的值,其中它是“Y”和“N”的 2 个值的向量 如果你想得到“Y”或“N”,你可以这样做

df$V1[df$V1 %in% c("Y", "N")] <- c(1,0

就您而言,我可能会考虑使用 R 中的因子。因子是类别。因子中的级别就像向量的摘要,告诉您向量中有哪些唯一值/因子。函数levels(x)为您提供向量 x 的级别

因此,如果您有一个如下所示的向量:x<-c('Male', 'Male','Male','Female','Female','Female')

你会看到它是由 2 个重复项组成 'Male', 'Female'

如果你运行levels(x)

你会得到

[1] Male Male Male Female Female Female
levels: Male Female

当你运行levels(x) <- c('M','F')

你会得到

[1] M M M F F F
levels: M F

例如,如果您有给定的以下数据框:

V1 <- rep(letters[1],10, letters[4],8) ## first column consist of 10 'a' and 8'd'
V2 <- 1:18
df <- data.frame(V1, V2) 

levels(df$V1) <- c('A','D') # replace all 'a' with 'A' and all 'd' with 'D'    

我认为这是柏拉图式的替换方式。

如果您只想替换特定值,我建议您编写一个像散列一样工作的函数,并应用于数据帧。

该技术在ggplot中用于替换facet_wrap http://www.cookbook-r.com/Graphs/Facets_(ggplot2)/中的标签

但这意味着您最终将编写更多代码行,尽管我认为它会看起来更好

关于在一条语句中重命名多个字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28587366/

相关文章:

r - 我的 hist 函数没有在 R 中绘图,我该怎么办?

r - 如何使用 dplyr 从两组中成对计算列

css - 在 r shiny ui 中以不同颜色突出显示字符串的不同部分

r - 将文本放在 R 图中有空白的地方

R文本文件和文本挖掘...如何加载数据

r - 如何检测通用函数参数中缺少的点-点-点

r - 如何求解和绘制 R 中的微分方程?

R - "CAPdiscrim"和 "lda"错误 "variable 1 appears to be constant within groups"

r - `rowname` - 矩阵列表

r - 在 R 图中绘制交互