我有一个基因型数据框,它有一列标记为D2S1338,D2S1338.1,CSF1PO,CSF1PO.1,五角星D,五角星D.1的基因座。这些名称是在我将Excel电子表格导入R时自动生成的,因此对于标记为CSF1PO的两列,具有第一组等位基因的列被标记为CSF1PO,第二列被标记为CSF1PO.1。这很好用,直到我得到了在Excel中列出了一个空格并导入为Penta.D的Penta D为止。当我应用以下代码时,Penta.D与Penta.C和Penta.E组合在一起,给出了无意义的结果:
locuses = unique(unlist(lapply(strsplit(names(Freqs), ".", fixed=TRUE), function(x) x[1])))
Expected <- sapply(locuses, function(x) 1 - sum(unlist(Freqs[grepl(x, names(Freqs))])^2))这段代码适用于除五角星以外的所有位置,因为它们是自动命名的。我如何为PentaC、PentaD和PentaE中的strsplit编写异常,或者将这些名称更改为strsplit,以便上面的代码按预期工作?我运行以下代码行:
Genotypes <- transform(Genotypes, rename.vars(Genotypes, from="Penta.C", to="PentaC", info=TRUE))它告诉我:
Changing in Genotypes
From: Penta.C
To: PentaC 但当我查看基因型时,它仍然将我的五角形基因位点写成了五角形。我以为这个函数会把它写回原始数据帧,而不仅仅是一个副本。这里我漏掉了什么?谢谢你的帮助。
发布于 2014-01-04 00:56:44
代码的第一行是将变量名拆分为。并提取第一块。这听起来像是你想要拆分。并提取除最后一块以外的所有部分:
locuses = unique(unlist(lapply(strsplit(names(Freqs), ".", fixed=TRUE),
function(x) paste(x[1:(length(x)-1)], collapse=""))))发布于 2014-01-04 06:46:34
看起来您想要删除".n“,其中n是一个数字,当且仅当它出现在行尾时。
loci.columns <- read.table(header=F,
text="D2S1338,D2S1338.1,CSF1PO,CSF1PO.1,Penta.D,Penta.D.1",
sep=",")
loci <- gsub("\\.\\d$",replace="",unlist(loci.columns))
loci
# [1] "D2S1338" "D2S1338" "CSF1PO" "CSF1PO" "Penta.D" "Penta.D"
loci <- unique(loci)
loci
# [1] "D2S1338" "CSF1PO" "Penta.D"在gsub(...)中,\\.匹配".",\\d匹配任何数字,$强制匹配在行尾。
发布于 2014-01-06 04:19:54
基本的问题似乎是make.names函数在导入时使名称“有效”
> make.names("Penta C")
[1] "Penta.C"避免使用read.table的check.names=FALSE参数对R的列重命名。如果显式引用列,则需要提供反引号字符串
df$`Penta C`https://stackoverflow.com/questions/20908548
复制相似问题