R数据框中的列名是否可以为空?

R数据框中的列名是否可以为空?,r,tidyverse,R,Tidyverse,我使用以下代码在R中创建一个数据帧 library(kableExtra) library(tidyverse) d <- c('GDP Response to Positive','','CPI Response to Positive','') s <- c('AS Shock','AD Shock','AS Shock','AD Shock') sr <- c('+','+','-','+') lr <- c('+','Neutral','-','+') dat

我使用以下代码在R中创建一个数据帧

library(kableExtra)
library(tidyverse)

d <- c('GDP Response to Positive','','CPI Response to Positive','')
s <- c('AS Shock','AD Shock','AS Shock','AD Shock')
sr <- c('+','+','-','+')
lr <- c('+','Neutral','-','+')

data.frame(d,s,sr,lr) %>% 
  rename(``=d)


我假设这意味着数据帧中的列名不能为空。想知道有没有解决办法?我希望列名为空,因为我正在使用此数据框使用kableExtra创建一个表,并且我希望我的表中的列名为空

如果要将列“d”重新指定给,请将

这些是非标准列名,因此每次都会被反引号引用

OP代码中的错误不是特定于重命名的。它可以像在控制台上打印反引号一样复制

``
错误:尝试使用零长度变量名

根据colnames

对于数据帧,行名称的值应该是非重复和非缺失名称的字符向量,这是强制的,对于colnames,字符向量最好是唯一的语法有效名称。在这两种情况下,值都将由as.character强制执行,设置colnames将行名称转换为character


只要使用base R就可以了

d <- c('GDP Response to Positive','','CPI Response to Positive','')
s <- c('AS Shock','AD Shock','AS Shock','AD Shock')
sr <- c('+','+','-','+')
lr <- c('+','Neutral','-','+')
    
df <- data.frame(d,s,sr,lr)
colnames(df)[1] <-""

我发现不可能在R数据框中为列创建空名称,但是我只需要在从数据框创建的实际表中将列名设置为空。所以我做了下面的事情

library(kableExtra)
library(tidyverse)
library(kableExtra)

sr <- c('+','+','-','+')
lr <- c('+','Neutral','-','+')
d <- c('GDP Response to Positive','','CPI Response to Positive','')
s <- c('AS Shock','AD Shock','AS Shock','AD Shock')

data.frame(d,s,sr,lr) %>% 
  kable(col.names = c('','','Short Run','Long Run')) 

现在,我的表中的前两列有空名称

也许您可以尝试下面的setNames+replace

df <- data.frame(d, s, sr, lr)
setNames(df, replace(names(df), names(df) == "d", ""))

谢谢@IanCampbell,我找到了一个解决问题的方法,所以我将把它发布在这里
library(kableExtra)
library(tidyverse)
library(kableExtra)

sr <- c('+','+','-','+')
lr <- c('+','Neutral','-','+')
d <- c('GDP Response to Positive','','CPI Response to Positive','')
s <- c('AS Shock','AD Shock','AS Shock','AD Shock')

data.frame(d,s,sr,lr) %>% 
  kable(col.names = c('','','Short Run','Long Run')) 

df <- data.frame(d, s, sr, lr)
setNames(df, replace(names(df), names(df) == "d", ""))
                                  s sr      lr
1 GDP Response to Positive AS Shock  +       +
2                          AD Shock  + Neutral
3 CPI Response to Positive AS Shock  -       -
4                          AD Shock  +       +