r - 将数据集与“数据框”合并,列名从 ; 到。,为什么?
问题描述
我在我的数据集中发现了一些东西,但我不明白它为什么会发生。在这里,我复制了数据集。当我将两个数据框合并为一个时;正在更改为点“。”,但仅在我执行 df <- data.frame(dfmeta,dd) 时发生,而不是在执行 df <- cbind(dfmeta,dd) 时发生。当我做 data.frame 时发生了什么(以及为什么)?非常感谢您的建议!
a <- c("Bacteria;p","Bacteria;p","Bacteria;p")
b <- c("Bacteroidetes;c", "Firmicutes;c", "Bacteroidetes;c")
c <- c("Bacteroidia;o", "Clostridia;o", "Bacteroidia;o")
otu <- data.frame(a,b,c)
name <- apply(otu,1,function(x) paste(x, collapse = ' '))
a <- data.frame(name)
q1<- c(2,3,4)
q2<- c(5,6,7)
q3<- c(2,6,9)
dd<- data.frame(q1,q2,q3)
colnames(dd)<- name
dd
Bacteria;p Bacteroidetes;c Bacteroidia;o Bacteria;p Firmicutes;c Clostridia;o
1 2 5
2 3 6
3 4 7
Bacteria;p Bacteroidetes;c Bacteroidia;o
1 2
2 6
3 9
b.t <- c(1:3)
bb <- LETTERS[1:3]
dfmeta <- data.frame(b.t,bb)
df <- data.frame(dfmeta,dd)
df
b.t bb Bacteria.p.Bacteroidetes.c.Bacteroidia.o Bacteria.p.Firmicutes.c.Clostridia.o
1 1 A 2 5
2 2 B 3 6
3 3 C 4 7
Bacteria.p.Bacteroidetes.c.Bacteroidia.o.1
1 2
2 6
3 9
解决方案
如果您检查?data.frame
函数,它有默认check.names
设置为的参数。TRUE
check.names
逻辑。如果为 TRUE,则检查数据框中的变量名称以确保它们是语法上有效的变量名称并且不重复。如有必要,它们会被调整(通过 make.names),这样它们就可以了。
这意味着它会尝试为您传递的数据创建语法上有效的列名。
什么是语法上有效的名称在?make.names
语法上有效的名称由字母、数字和点或下划线字符组成,并以字母或点开头,后跟数字。“.2way”等名称无效,保留字也无效。如有必要,可在前面加上字符“X”。所有无效字符都被翻译成“.”
因此,所有带有空格或分号的列名都替换为点。cbind
没有这样的参数,因此它允许在语法上无效的列名。
如果你想data.frame
允许它也关闭check.names
。
data.frame(dfmeta,dd, check.names = FALSE)
# b.t bb Bacteria;p Bacteroidetes;c Bacteroidia;o Bacteria;p Firmicutes;c Clostridia;o
#1 1 A 2 5
#2 2 B 3 6
#3 3 C 4 7
# Bacteria;p Bacteroidetes;c Bacteroidia;o
#1 2
#2 6
#3 9
推荐阅读
- oracle - 我想添加一个带有日期参数的子查询以返回计算值,但我的查询不起作用
- c# - 如何在 LINQ 的“where”子句中更新全局变量?
- r - R RMarkdown中数字的位置
- c# - 如何调用具有不同返回类型的已实现接口方法?
- prestashop-1.7 - ClassNotFoundException - PrestaShop 1.7.4.3
- python - 比较两个数据帧之间的每个元素
- java - 随机生成器创建相同的数字
- java - 通过 Java SDK 的 Azure VM 指标
- pyspark - 在 Pyspark 中实现 K-medoids
- sql - 我在从多个表中删除行时遇到问题