R:如何根据其他列值更改单个df值?

时间:2015-12-23 15:15:58

标签: r

我想根据另一列中的字符更改df列中的单个值。这是一个小例子(我想改变塞舌尔的代码[,2]):

cntry <- c("Saudi Arabia","Senegal","Serbia","Seychelles", "Sierra Leone")
code <- c(194,195,272,1351,197)
CNTRYcode <- data.frame(cntry,code)

我会使用索引:

CNTRYcode[4,2] <- 196

问题是我的df入口可能会改变。那么,如何使用cntry-column更改代码?感谢

1 个答案:

答案 0 :(得分:2)

在进行data.frame子集化时,您不必对数字进行硬编码 - 您可以调用将返回预期数字的函数。与match()一样。

这种方式会直接修改data.frame

CNTRYcode[match("Seychelles", CNTRYcode$cntry), 2]
CNTRYcode[match("Seychelles", CNTRYcode$cntry), "code"]

第二个示例按名称列引用,因此即使您决定在cntrycode之间添加第三列,它也会起作用。

另一种方法利用了这样一个事实:您可以提交逻辑值向量而不是使用数字索引:

CNTRYcode$cntry == "Seychelles"
# [1] FALSE FALSE FALSE  TRUE FALSE
CNTRYcode[CNTRYcode$cntry == "Seychelles", "code"]

如果您想要更精确的搜索条件,这将非常有用 - 您可以使用&进行连接(AND),使用|进行替代(OR)。其他一些编程语言可能会让你习惯于将操作数加倍(&&||),但在R中,它们会将向量减少为单值 - 在这种情况下,这不是你想要的。

您还可以在键的向量中找到位置查找值,并修改发生在您想要更改的值向量中的相同位置的任何内容:

CNTRYcode$code[CNTRYcode$cntry == "Seychelles"]