为什么我的列名更改在R中不起作用?

为什么我的列名更改在R中不起作用?,r,rename,R,Rename,这是im编写的脚本的一部分,用于在使用“合并”后更充分地合并collumns。 如果两个数据集都有同名的列,则merge将为您提供column.x和column.y列。我编写了一个脚本,将这些数据放在一起,并删除不需要的列,这些列将是column.y和column.x_error,我添加了一个列以在dat$column.x!=dat$column.y。我还想将column.x重命名为column,以减少数据集中不必要的手动操作。我还没有将column.x重命名为column,有关详细信息,请参阅

这是im编写的脚本的一部分,用于在使用“合并”后更充分地合并collumns。 如果两个数据集都有同名的列,则merge将为您提供column.x和column.y列。我编写了一个脚本,将这些数据放在一起,并删除不需要的列,这些列将是column.y和column.x_error,我添加了一个列以在dat$column.x!=dat$column.y。我还想将column.x重命名为column,以减少数据集中不必要的手动操作。我还没有将column.x重命名为column,有关详细信息,请参阅代码

dat是通过执行dat=mergedata1、data2、by=ID、all.x=TRUE来获得的

pastesub.x_错误,,colnamedat[k]将为我提供BNR,但colnames…=。。。不会更改dat中的列名

知道怎么回事吗?

我建议更换:

sub(".x_error",".x",colnames(dat[k]))]
与:

如果您希望替换实际的。。你必须逃跑。用\\。。A.在正则表达式中,表示任何字符

更好,因为你正在替换。具有为什么不说:

sub("x_error", "x", colnames(dat[k]))] 
或者,如果没有x_错误以外的其他_错误,只需:

编辑:问题似乎是您的数据格式似乎正在加载左侧和右侧的其他列。可以先选择所需的列,然后合并

d1 <- read.table(textConnection("| ID | BNR   | 
|  1 | 123   | 
|  2 | 234   |
|  3 | NA    | 
|  4 | 456   | 
|  5 | 677   |
|  6 | NA    |"), sep = "|", header = TRUE, stringsAsFactors = FALSE)[,2:3]

d1$BNR <- as.numeric(d1$BNR)

d2 <- read.table(textConnection("|  1 | 123   | 
|  2 | 234   |
|  3 | 345   | 
|  4 | 456   | 
|  5 | 677   |
|  6 | NA    |"), header = FALSE, sep = "|", stringsAsFactors = FALSE)[,2:3]

names(d2) <- c("ID", "BNR")
d2$BNR <- as.numeric(d2$BNR)

# > d1
#   ID BNR
# 1  1 123
# 2  2 234
# 3  3  NA
# 4  4 456
# 5  5 677
# 6  6  NA

# > d2
#   ID BNR
# 1  1 123
# 2  2 234
# 3  3 345
# 4  4 456
# 5  5 677
# 6  6  NA

dat <- merge(d1, d2, by="ID", all=T)
> dat

#   ID BNR.x BNR.y
# 1  1   123   123
# 2  2   234   234
# 3  3    NA   345
# 4  4   456   456
# 5  5   677   677
# 6  6    NA    NA

# replace all NA values in x from y
dat$BNR.x <- ifelse(is.na(dat$BNR.x), dat$BNR.y, dat$BNR.x)

# now remove y
dat$BNR.y <- null

你能提供一个样本数据,并解释你正在尝试做什么吗?你能告诉我们你是如何获得dat的吗。我这样说是因为,可能有一种方法可以通过合并或其他替代方法直接获得结果。当然,我会尽力找出你的代码中发生了什么。但是,以防您对替代方案感兴趣。是的,更好更快的代码当然总是更好的,我将添加完整的代码。我只使用R一周,所以它可能还不太好。很抱歉要求更多的东西,但是你能给我们看看data1、data2和你想要的输出吗?这将使我们能够提供直接的结果,我想你会想要更多,它会更短。添加更多的信息从来都不是一个问题,如果它让你帮助我。谢谢您的时间。除非您检查grepl\\\.x_错误,否则您的第一个if语句永远不会为真,……我不知道怎么做,但它实际上是真的。正在更改为\\.x_错误,。。。从.x_错误,。。。没有更改if或sub方法中的任何内容。嗯,好吧,我想我犯了一个错误。抱歉搞混了。我刚刚意识到我可能在这个问题上提供了太多的随机信息。我想知道的是,非常简单,为什么colnamedat[1]=newname不会将列1的名称更改为newname?包含newname或使用colnamedat[oldname]=newname的变量也不起作用。它不起作用。您应该使用colnamedat[1]
sub("\\.x_error", "\\.x", colnames(dat[k]))] 
sub("x_error", "x", colnames(dat[k]))] 
sub("_error", "", colnames(dat[k]))] 
d1 <- read.table(textConnection("| ID | BNR   | 
|  1 | 123   | 
|  2 | 234   |
|  3 | NA    | 
|  4 | 456   | 
|  5 | 677   |
|  6 | NA    |"), sep = "|", header = TRUE, stringsAsFactors = FALSE)[,2:3]

d1$BNR <- as.numeric(d1$BNR)

d2 <- read.table(textConnection("|  1 | 123   | 
|  2 | 234   |
|  3 | 345   | 
|  4 | 456   | 
|  5 | 677   |
|  6 | NA    |"), header = FALSE, sep = "|", stringsAsFactors = FALSE)[,2:3]

names(d2) <- c("ID", "BNR")
d2$BNR <- as.numeric(d2$BNR)

# > d1
#   ID BNR
# 1  1 123
# 2  2 234
# 3  3  NA
# 4  4 456
# 5  5 677
# 6  6  NA

# > d2
#   ID BNR
# 1  1 123
# 2  2 234
# 3  3 345
# 4  4 456
# 5  5 677
# 6  6  NA

dat <- merge(d1, d2, by="ID", all=T)
> dat

#   ID BNR.x BNR.y
# 1  1   123   123
# 2  2   234   234
# 3  3    NA   345
# 4  4   456   456
# 5  5   677   677
# 6  6    NA    NA

# replace all NA values in x from y
dat$BNR.x <- ifelse(is.na(dat$BNR.x), dat$BNR.y, dat$BNR.x)

# now remove y
dat$BNR.y <- null