我是R工作室的新人.我发现,当我复制从xlsx文件导入的数据框中的列时,新的列名包括列名前的后缀.但是,如果我在R中创建数据框,新的列名将不包括后缀.这个问题真的把我搞糊涂了.我想知道如何取消这个功能. 以下是我的测试代码:

library(readxl)
> df <- read_excel("test.xlsx", sheet = "Sheet1")                                                                                                                                         
> cName <- "Column2"
> df$Column3 <- df[,cName]
> df
# A tibble: 3 × 3
  Column1 Column2 Column3$Column2
    <dbl>   <dbl>           <dbl>
1       1       4               4
2       2       5               5
3       3       6               6

以下代码显示了使用READ_EXCEL时的后缀

> df <- data.frame( Column1 = c(1,2,3),
+                   Column2 = c(4,5,6))
> cName <- "Column2"
> df$Column3 <- df[,cName]
> df
  Column1 Column2 Column3
1       1       4       4
2       2       5       5
3       3       6       6

在R中创建DF时,此代码不显示后缀.

我想知道当我从.xlsx文件导入数据框时如何避免后缀.

推荐答案

这种行为并不特定于来自Excel文件的数据,而是该包恰好返回tibble而不是data.frame.这两个对象在很大程度上是相同的,除了它们在子集通过[时具有不同的drop参数的默认值.

df <- tibble( Column1 = c(1,2,3),
                  Column2 = c(4,5,6))
cName <- "Column2"
df$Column3 <- df[,cName] # Assigning a one column tibble
df$Column3 <- df[,cName,drop = TRUE] # Assigning a vector

事实上,如果你看一下第一个 case 的 struct ,你会发现发生的事情可能根本不是你想要的:

> str(df)
tibble [3 × 3] (S3: tbl_df/tbl/data.frame)
 $ Column1: num [1:3] 1 2 3
 $ Column2: num [1:3] 4 5 6
 $ Column3: tibble [3 × 1] (S3: tbl_df/tbl/data.frame)
  ..$ Column2: num [1:3] 4 5 6

通常,通过以下方式 Select 单个列作为向量会更安全(对于点阵数据帧而言):

df[[cName]]

R相关问答推荐

多个ggpredicate对象的平均值

查找具有平局的多个列的最大值并返回列名或平局 destruct 者NA值

使用对管道内单元格的引用生成新变量

如果列中存在相同的字符串,则对行值进行总和

我想在R中总结一个巨大的数据框架,使我只需要唯一的lat、lon、Date(Year)和Maxium Value""""""""

使用geom_segment()对y轴排序

为什么舍入POSIXct会更改能力以匹配等效的POSIXct?

打印XTS对象

从服务器在Shiny中一起渲染图标和文本

基于R中的间隔扩展数据集行

R如何计算现有行的总和以添加新的数据行

将多个变量组合成宽格式

将工作目录子文件夹中的文件批量重命名为顺序

如果条件匹配,则使用Mariate粘贴列名

删除字符串R中的重复项

是否有一个R函数可以输出在输入的字符向量中找到的相应正则表达式模式?

将数据从一列转换为按组累计计数的单个虚拟变量

通过匹配另一个表(查找表)中的列值来填充数据表,并在另一个变量上进行内插

希望解析和复制R中特定模式的数据

为什么在POSIXct-times的向量上循环会改变R中的类型?