为什么我的列名更改在R中不起作用?
这是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中的列名 知道怎么回事吗? 我建议更换:为什么我的列名更改在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,有关详细信息,请参阅
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