R 如何替换数据框中列的一部分的值?
这看起来像是一个应该在某处或其他地方问的问题,但我就是找不到,所以我还是会问 我有一个csv文件,需要清理。我使用R 如何替换数据框中列的一部分的值?,r,dataframe,dplyr,R,Dataframe,Dplyr,这看起来像是一个应该在某处或其他地方问的问题,但我就是找不到,所以我还是会问 我有一个csv文件,需要清理。我使用read\u csv将其放入R。我们称之为df 现在,列C存储人员或公司名称。大多数数据点都很好,但由于一些无法想象的原因,其中一小部分没有正确解码(在生成此csv文件时),并且仍以base64格式存储,如下所示:[b64]5b+r5LmQ56aPMjAxMQ==[/b64] 然后我构造了一个函数来解码它: MyDecode <- function(x) iconv(rawTo
read\u csv
将其放入R。我们称之为df
现在,列C
存储人员或公司名称。大多数数据点都很好,但由于一些无法想象的原因,其中一小部分没有正确解码(在生成此csv文件时),并且仍以base64格式存储,如下所示:[b64]5b+r5LmQ56aPMjAxMQ==[/b64]
然后我构造了一个函数来解码它:
MyDecode <- function(x) iconv(rawToChar(caTools::base64decode(x,"raw")),
from="utf-8", to = "gb18030")
MyDecode将Vectorize
d版本与ifelse
一起使用,类似于mutate(fixed=ifelse(grepl(^\[b64],丑陋列))、向量化的\u MyDecode(丑陋列)、丑陋列)
。这将仅将my_decode函数的矢量化版本应用于需要它的列的子集,并按原样返回其余部分。或者,您可以对grepl(“^\[b64”,丑陋的列)进行编码检查
在my_decode函数中,如果为false,则返回未触及的字符串。@Gregor我做了MyDecodeV是吗?你的意思是正确的,但我不会这么说——你可能过度概括了。Mutate用于添加列(即向量)因此,mutate
中的任何表达式都需要返回适当长度的向量。summary将列压缩为单行,因此,summary
中的任何表达式都需要返回长度为一的值。select
,rename
,并不是真正的向量化,filter
需要向量它类似于mutate
,但它们需要是布尔值。因此,我想如果你用“mutate”替换“dplyr动词”,我会同意。也许总结也取决于你如何定义“矢量化”。使用矢量化d版本和ifelse
,类似于mutate(fixed=ifelse(grepl(\\[b64],丑陋的列)),矢量化的_mydecode(丑陋的_列),丑陋的_列)
。这将仅将my_decode函数的矢量化版本应用于需要它的列的子集,并按原样返回其余部分。或者,您可以对grepl(^\\[b64],丑陋的_列)进行代码检查
在my_decode函数中,如果为false,则返回未触及的字符串。@Gregor我做了MyDecodeV是吗?你的意思是正确的,但我不会这么说——你可能过度概括了。Mutate用于添加列(即向量)因此,mutate
中的任何表达式都需要返回适当长度的向量。summary将列压缩为单行,因此,summary
中的任何表达式都需要返回长度为一的值。select
,rename
,并不是真正的向量化,filter
需要向量它类似于mutate
,但它们必须是布尔值。因此,我想如果您将“dplyr动词”替换为“mutate”,我会同意。也许也总结了,这取决于您如何定义“向量化”。