我想根据另一列中的字符更改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更改代码?感谢
答案 0 :(得分:2)
在进行data.frame
子集化时,您不必对数字进行硬编码 - 您可以调用将返回预期数字的函数。与match()
一样。
这种方式会直接修改data.frame
:
CNTRYcode[match("Seychelles", CNTRYcode$cntry), 2]
CNTRYcode[match("Seychelles", CNTRYcode$cntry), "code"]
第二个示例按名称列引用,因此即使您决定在cntry
和code
之间添加第三列,它也会起作用。
另一种方法利用了这样一个事实:您可以提交逻辑值向量而不是使用数字索引:
CNTRYcode$cntry == "Seychelles"
# [1] FALSE FALSE FALSE TRUE FALSE
CNTRYcode[CNTRYcode$cntry == "Seychelles", "code"]
如果您想要更精确的搜索条件,这将非常有用 - 您可以使用&
进行连接(AND),使用|
进行替代(OR)。其他一些编程语言可能会让你习惯于将操作数加倍(&&
和||
),但在R中,它们会将向量减少为单值 - 在这种情况下,这不是你想要的。
您还可以在键的向量中找到位置查找值,并修改发生在您想要更改的值向量中的相同位置的任何内容:
CNTRYcode$code[CNTRYcode$cntry == "Seychelles"]