我正在努力将各种文本文件合并到一个数据框中,
到目前为止我已经
了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
答案 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)))