两个数据帧的合并会导致R中的多个数据帧
我试图从data.frame结构中剥离两个数据帧,提取每个data.frame中的元素,并将从数据帧中提取的数据合并到单个data.frame中。这将导致data.frame由两列作为向量组成。请参阅下面用粗体标记的输出 问题:输出包含多个data.frame元素,而不是包含输入数据帧向量的单个data.frame 每个数据帧包含一个向量 [编辑^v以回应评论。] 到目前为止,我已经尝试了as和unlist的各种组合,但都无济于事 我尝试使用内置的R函数和矢量化来解决这个问题,而不是使用plyrand循环: 可复制代码:我无法复制错误,但以下是我希望我的代码能够工作的方式:两个数据帧的合并会导致R中的多个数据帧,r,merge,dataframe,apply,R,Merge,Dataframe,Apply,我试图从data.frame结构中剥离两个数据帧,提取每个data.frame中的元素,并将从数据帧中提取的数据合并到单个data.frame中。这将导致data.frame由两列作为向量组成。请参阅下面用粗体标记的输出 问题:输出包含多个data.frame元素,而不是包含输入数据帧向量的单个data.frame 每个数据帧包含一个向量 [编辑^v以回应评论。] 到目前为止,我已经尝试了as和unlist的各种组合,但都无济于事 我尝试使用内置的R函数和矢量化来解决这个问题,而不是使用plyr
df1<-data.frame<-c(1, 2, 3)
df2<-data.frame<-c(2, 4, 6)
output<-cbind(df1, df2)
print(output) #Returns a data.frame
str(output) # of vectors
#In my case however, a data.frame returns data.frames)
现实:
但我希望是这样
filename result
[1,] filename[i] 142
[2,] filename[i] 521
[3,] filename[i] 324
…其中filename[i]是文件名的索引
输出返回
List of 2400
$ :'data.frame': 1 obs. of 2 variables:
..$ filename : Factor w/ 1 level "bigdata/001.csv": 1
..$ sumrows: num 142
$ :'data.frame': 1 obs. of 2 variables:
..$ filename : Factor w/ 1 level "bigdata/001.csv": 1
..$ sumrows: num 521
$ :'data.frame': 1 obs. of 2 variables:
..$ filename : Factor w/ 1 level "bigdata/001.csv": 1
..$ sumrows: num 324
$ :'data.frame': 1 obs. of 2 variables:
..$ filename : Factor w/ 1 level "bigdata/001.csv": 1
.....
list(structure(list(filename = structure(1L, .Label = "bigdata/001.csv", class = "factor"),
sumrows = 142), .Names = c("filename", "sumrows"), row.names = c(NA,
-1L), class = "data.frame"), structure(list(filename = structure(1L, .Label = "bigdata/001.csv", class = "factor"),
sumrows = 521), .Names = c("filename", "sumrows"
), row.names = c(NA, -1L), class = "data.frame"), structure(list(
filename = structure(1L, .Label = "bigdata/001.csv", class = "factor"),
sumrows = 324), .Names = c("filename", "sumrows"), row.names = c(NA,
-1L), class = "data.frame"), structure(list(filename = structure(1L, .Label = "bigdata/001.csv", class = "factor"),
sumrows = 1896), .Names = c("filename", "sumrows"
), row.names = c(NA, -1L), class = "data.frame"), structure(list(
filename = structure(1L, .Label = "bigdata/001.csv", class = "factor"),
sumrows = 1608), .Names = c("filename", "sumrows"
), row.names = c(NA, -1L), class = "data.frame"), structure(list(
filename = structure(1L, .Label = "bigdata/001.csv", class = "factor"),
sumrows = 912), .Names = c("filename", "sumrows"), row.names = c(NA,
-1L), class = "data.frame"))
dputheadoutput返回
List of 2400
$ :'data.frame': 1 obs. of 2 variables:
..$ filename : Factor w/ 1 level "bigdata/001.csv": 1
..$ sumrows: num 142
$ :'data.frame': 1 obs. of 2 variables:
..$ filename : Factor w/ 1 level "bigdata/001.csv": 1
..$ sumrows: num 521
$ :'data.frame': 1 obs. of 2 variables:
..$ filename : Factor w/ 1 level "bigdata/001.csv": 1
..$ sumrows: num 324
$ :'data.frame': 1 obs. of 2 variables:
..$ filename : Factor w/ 1 level "bigdata/001.csv": 1
.....
list(structure(list(filename = structure(1L, .Label = "bigdata/001.csv", class = "factor"),
sumrows = 142), .Names = c("filename", "sumrows"), row.names = c(NA,
-1L), class = "data.frame"), structure(list(filename = structure(1L, .Label = "bigdata/001.csv", class = "factor"),
sumrows = 521), .Names = c("filename", "sumrows"
), row.names = c(NA, -1L), class = "data.frame"), structure(list(
filename = structure(1L, .Label = "bigdata/001.csv", class = "factor"),
sumrows = 324), .Names = c("filename", "sumrows"), row.names = c(NA,
-1L), class = "data.frame"), structure(list(filename = structure(1L, .Label = "bigdata/001.csv", class = "factor"),
sumrows = 1896), .Names = c("filename", "sumrows"
), row.names = c(NA, -1L), class = "data.frame"), structure(list(
filename = structure(1L, .Label = "bigdata/001.csv", class = "factor"),
sumrows = 1608), .Names = c("filename", "sumrows"
), row.names = c(NA, -1L), class = "data.frame"), structure(list(
filename = structure(1L, .Label = "bigdata/001.csv", class = "factor"),
sumrows = 912), .Names = c("filename", "sumrows"), row.names = c(NA,
-1L), class = "data.frame"))
将列表更改为data.frame的一般技术是使用do.call 不幸的是,你不知道什么是文件名[i] 编辑 此解决方案似乎适用于OP:
library(plyr)
ldply(ll)
通常,您可以使用:
ldply(ll,function(x){
##you process the row x here
}
)
为了节省人们的时间,您可以编辑您的问题,并在顶部解释您在尝试添加两个数据帧时的意思。我想你不是在说df1+df2。。。事实上,你为什么不给我们一个有两个小数据帧和预期输出的可复制的例子呢?你的许多代码似乎与这个问题无关。我现在试图澄清我的问题。@Daniellabé什么是文件名[]?我的意思是为什么[]请制作你的代码。我们应该能够将您的代码复制到R会话中执行它。您的问题的答案可能包括?do.call@agstudy。抱歉,我的意思是filename[I],其中我是矢量文件名的索引。问题是我需要将两个数据帧强制转换为矢量。很抱歉没有说清楚。您至少可以添加:stroutput和dputheadoutput的输出吗?完成。如果还有其他问题,请告诉我。@DanielLabbé我将编辑您的问题以使其更简单。@DanielLabbé您能了解文件名[I]是什么吗?再加上我错过的。。?
do.call(rbind,ll)
filename sumrows
1 bigdata/001.csv 142
2 bigdata/001.csv 521
3 bigdata/001.csv 324
4 bigdata/001.csv 1896
5 bigdata/001.csv 1608
6 bigdata/001.csv 912
library(plyr)
ldply(ll)
ldply(ll,function(x){
##you process the row x here
}
)