今天在处理EXCAL表格的时候,遇到列名有空格的情况,引起报错,排查许久才明白是这个原因在成的。
处理pcr数据的时候,下机数据列名中有空格,对后续的处理造成影响。
解决办法有二:
> colnames(abcd)#处理pcr数据的时候,下机数据列名中有空格,对后续的处理造成影响。
[1] "Well" "Well Position" "Omit" "Sample Name" "Target Name" "Task"
[7] "Reporter" "Quencher" "Quantity" "Quantity Mean" "Quantity SD" "RQ"
[13] "RQ Min" "RQ Max" "CT" "Ct Mean" "Ct SD" "Delta Ct"
[19] "Delta Ct Mean" "Delta Ct SD" "Delta Ct SE" "Delta Delta Ct" "Automatic Ct Threshold" "Ct Threshold"
[25] "Automatic Baseline" "Baseline Start" "Baseline End" "Amp Status" "Comments" "Cq Conf"
[31] "CQCONF" "PRFLOW" "HIGHSD" "Tm1" "Tm2" "Tm3"
[37] "Tm4"
第一种解决办法:
使用“`”符号括起来,例如:
> abcd2 <- abcd2 %>% # 列名空格造成报错
+ transmute(
+ CT,
+ sx = Sample Name,
Error: unexpected symbol in:
" CT,
sx = Sample Name"
> #将Sample Name用"`"括起来就能解决
> abcd <- abcd %>%
+ transmute(
+ CT,
+ sx = `Sample Name`,
+ xm = `Target Name`,
+ )
这种基础不牢的造成的报错往往在一些细节上可以发现,例如当使用"$"去选择特定列的时候
R的补齐代码功能就提示我们这种情况该如何处理:
选择Sample Name之后,补全的代码是:
> abcd$`Sample Name`
> [1] "u6" "u6" "u6" "u6" "u6" "u6" "u6" "u6" "u6" "u6" "u6" "u6" "u6"
平时多注意这些细节,可以帮助我们提升能力
第二种方法:
直接在excal中重命名,再重新读取,我管你啥语法呢,暴力解决
tidyverse包提供了rename()函数可以帮助我们对部分列进行重命名,已iris数据集为例:
> data <- iris[1:50,]
> head(data)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
> #使用rename()函数更改列名
> data <- data %>% rename(abc = Sepal.Length)
> head(data)
abc Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
> #应当注意的是,更改后的名字应该放在前面,逻辑跟给函数赋值是一样的.
> #也可以将列名更改成带有特殊字符的,例如空格
> data <- data %>% rename(`a b c` = abc)
> head(data)
a b c Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
>