将列命名并添加到数据框

时间:2014-10-08 17:20:16

标签: r dataframe

我正在努力将各种文本文件合并到一个数据框中,

到目前为止我已经

files = list.files()
data = lapply(files,function(x) read.table(x)) 
data_rbind <- do.call("rbind", data)

我想添加列标题, 我试过了

colnames(data_rbind)=c('car','colour','price')

但是,这会给出错误消息

  

colnames<-中的错误(*tmp*,值= c(&#34; car&#34;,&#34;颜色&#34;,&#34;价格&#34;)):   &#39;名称&#39; attribute [3]的长度必须与vector [1]

的长度相同

然后,我想添加一个名为“年”的第4栏。使用与每个文件的名称对应的值。这可能吗?

编辑 - 我已经意识到上面的错误是因为我的数据框只读取时应该是3个变量。这3列似乎都包含在1列中。我不确定为什么会这样。

我想将数据分成3个单独的列,并将结构函数分开读取

data.frame':    9001 obs. of  3 variables:
 $ V1: chr  "Toyota" "BMW" "Ford" ...
 $ V2: chr  "Blue" "Red" "Red" "Silver" ...
 $ V3: int  80412 65443 47920 41560 38019 29618 29074 28885 26159 25693 ...

我正在处理txt文件,每个文件都有多行包含3个以逗号分隔的值, 例如,

  福特,红色,8041

     

丰田,银,6544

     

BMW,红色,4792

1 个答案:

答案 0 :(得分:2)

该错误表示您的名称向量与数据框中的列数长度不同。如果要设置特定列的名称,请执行以下操作

#assume car, colour, and price correspond to columns 1, 3, 4
colnames(dataframe)[c(1,3,4)]<-c("car", "colour", "price")

如果要添加名为Year的列,可以按

添加
df$Year<-values

尽管您需要确保值中的条目数等于df中所需结果的行数。该列的名称将为&#34;年&#34;

为了表明它有效,我根据提供的问题提出了一个简单的txt文件。经过lapply我得到了

#[[1]]
#      V1     V2   V3
#1   Ford    Red 8041
#2 Toyota Silver 6544
#3    BMW    Red 4792
#
#[[2]]
#      V1     V2   V3
#1   Ford    Red 8041
#2 Toyota Silver 6544
#3    BMW    Red 4792
#
#[[3]]
#      V1     V2   V3
#1   Ford    Red 8041
#2 Toyota Silver 6544
#3    BMW    Red 4792

然后在do.call之后

#      V1     V2   V3
#1   Ford    Red 8041
#2 Toyota Silver 6544
#3    BMW    Red 4792
#4   Ford    Red 8041
#5 Toyota Silver 6544
#6    BMW    Red 4792
#7   Ford    Red 8041
#8 Toyota Silver 6544
#9    BMW    Red 4792

然后我们可以更改列名,不必要地显示关于indeces

colnames(dataframe)[c(1,2,3)]<-c("car", "color", "price")

我们也可以添加年份

dataframe$Year<-1 #all years are 1

#     car  color price Year
#1   Ford    Red  8041    1
#2 Toyota Silver  6544    1
#3    BMW    Red  4792    1
#4   Ford    Red  8041    1
#5 Toyota Silver  6544    1
#6    BMW    Red  4792    1
#7   Ford    Red  8041    1
#8 Toyota Silver  6544    1
#9    BMW    Red  4792    1

,这是lapply调用后的数据输入

list(structure(list(V1 = c("Ford", "Toyota", "BMW"), V2 = c("Red", 
"Silver", "Red"), V3 = c(8041L, 6544L, 4792L)), .Names = c("V1", 
"V2", "V3"), class = "data.frame", row.names = c(NA, -3L)), structure(list(
    V1 = c("Ford", "Toyota", "BMW"), V2 = c("Red", "Silver", 
    "Red"), V3 = c(8041L, 6544L, 4792L)), .Names = c("V1", "V2", 
"V3"), class = "data.frame", row.names = c(NA, -3L)), structure(list(
    V1 = c("Ford", "Toyota", "BMW"), V2 = c("Red", "Silver", 
    "Red"), V3 = c(8041L, 6544L, 4792L)), .Names = c("V1", "V2", 
"V3"), class = "data.frame", row.names = c(NA, -3L)))