将列名向右移动10个列

10 浏览
0 Comments

将列名向右移动10个列

我有以下的代码来导入一些数据。

url <- "https://finance.yahoo.com/industry/Scientific_Technical_Instruments"
library(rvest)
read <- read_html(url) %>%
  html_table() 
library(plyr)
data <- ldply(read, data.frame)

然而,当应该只有10列时,数据创建了一个包含20列的数据框。数据框的列名没有按照应该的方式导入,并创建了一些NA值。

在R中是否有一种方法可以移动列名,并删除创建的NA列?

0
0 Comments

问题出现的原因是在读取的数据中,列名不符合数据框列名的语法要求。

解决方法是通过使用make.names函数来清理列名。具体操作如下:

data <- data.frame(read[[2]])
names(data) <- make.names(names(read[[1]]))

也可以使用一行代码来实现上述操作,代码如下:

data <- setNames(data.frame(read[[2]]), make.names(names(read[[1]])))

另外,还可以结合两种方法来解决问题,代码如下:

setNames(data.frame(read[[2]]), colnames(read[[1]]))

以上就是解决该问题的原因和方法。

0
0 Comments

在上述代码中,出现了一个问题,即列名没有正确地对应到数据框中的列。这可能是由于数据框和列名之间的索引或对应关系不正确导致的。

为了解决这个问题,我们可以使用以下方法来将列名正确地对应到数据框中的列:

1. 使用`names()`函数来获取数据框的列名,并将其存储在一个变量中。

2. 使用`names()`函数来获取列名所在数据框中的列的索引,并将其存储在另一个变量中。

3. 使用`shift()`函数将列名的索引向右移动10个位置。

4. 使用`names()`函数和前面得到的索引变量来将移动后的列名赋值给数据框的列名。

下面是具体的代码实现:

my_data <- data.frame(read[[2]])
colnames(my_data) <- colnames(read[[1]])
# 获取数据框的列名
data_colnames <- names(my_data)
# 获取列名所在数据框中的列的索引
col_index <- which(names(read[[1]]) == colnames(my_data))
# 将列名的索引向右移动10个位置
shifted_col_index <- shift(col_index, n = 10, fill = NA)
# 将移动后的列名赋值给数据框的列名
colnames(my_data) <- data_colnames[shifted_col_index]

通过以上代码,我们可以将列名正确地对应到数据框中的列,并解决了原始代码中列名对应错误的问题。

0