在网络上,我发现它rbind()用于组合两个数据帧,同一个任务由bind_rows()功能执行.
那我不明白这两个函数有什么区别,哪个更有效?
我编写了以下函数来组合300个.csv文件.我的目录名是"specdata".我已经完成了以下执行步骤,
x <- function(directory) {
dir <- directory
data_dir <- paste(getwd(),dir,sep = "/")
files <- list.files(data_dir,pattern = '\\.csv')
tables <- lapply(paste(data_dir,files,sep = "/"), read.csv, header = TRUE)
pollutantmean <- do.call(rbind , tables)
}
# Step 2: call the function
x("specdata")
# Step 3: inspect results
head(pollutantmean)
Error in head(pollutantmean) : object 'pollutantmean' not found
Run Code Online (Sandbox Code Playgroud)
我的错是什么?有人可以解释一下吗?
我有这个df1:
A B C
1 2 3
5 7 9
Run Code Online (Sandbox Code Playgroud)
A B C列名称在哪里.
我有一个列的另一个df2:
A
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
我想为df1的每一列附加df2,创建这个最终的数据帧:
A B C
1 2 3
5 7 9
1 1 1
2 2 2
3 3 3
4 4 4
Run Code Online (Sandbox Code Playgroud)
有可能做到吗?
我有一个data.frame对象列表,我想将它们相互追加,即merge(..., all=T).但是,merge似乎删除了我需要保持原样的行名称.有任何想法吗?例:
x = data.frame(a=1:2, b=2:3, c=3:4, d=4:5, row.names=c("row_1", "another_row1"))
y = data.frame(a=c(10,20), b=c(20,30), c=c(30,40), row.names=c("row_2", "another_row2"))
> merge(x, y, all=T, sort=F)
a b c d
1 1 2 3 4
2 2 3 4 5
3 10 20 30 NA
4 20 30 40 NA
Run Code Online (Sandbox Code Playgroud) 继承我的数据:
> data
Manufacturers Models
1 Audi RS5
2 BMW M3
3 Cadillac CTS-V
4 Lexus ISF
Run Code Online (Sandbox Code Playgroud)
我想在第四行添加1行,如下所示:
> data
Manufacturers Models
1 Audi RS5
2 BMW M3
3 Cadillac CTS-V
4 Benz C63
5 Lexus ISF
Run Code Online (Sandbox Code Playgroud)
我试过像这样使用rbind():
Benz = data.frame(Manufacturers = "Benz", Models = "C63")
newdata = rbind(data,Benz)
Run Code Online (Sandbox Code Playgroud)
但我无法添加到我想要的地方.我很感激这个问题的任何帮助.非常感谢.
我试图绑定列表中的元素的一些子元素
清单OC如下
> library(quantmod)
> OC <- getOptionChain('AAPL', NULL)
> str(OC)
List of 9
$ Feb 2013:List of 3
..$ calls :'data.frame': 35 obs. of 7 variables:
.. ..$ Strike: num [1:35] 380 390 400 410 420 430 440 445 450 455 ...
.. ..$ Last : num [1:35] 89.9 86 60 49.5 39.8 ...
.. ..$ Chg : num [1:35] 0 0 -0.4 -4.4 -0.7 -1.9 -0.55 -0.7 -0.95 -1 ...
.. ..$ Bid : num [1:35] …Run Code Online (Sandbox Code Playgroud) 当使用带有值rbind的两个时,我对R强制变量类型的方式有疑问.我举例说明:data.framesNA
x<-factor(sample(1:3,10,T))
y<-rnorm(10)
dat<-data.frame(x,y)
NAs<-data.frame(matrix(NA,ncol=ncol(dat),nrow=nrow(dat)))
colnames(NAs)<-colnames(dat)
Run Code Online (Sandbox Code Playgroud)
现在的目标是追加dat,并NAs同时保持变量类型factor和numeric中x和y.当我给:
dat_forward<-rbind(dat,NAs)
is.factor(dat_forward$x)
Run Code Online (Sandbox Code Playgroud)
这很好用.但是后向使用rbind失败:
dat_backward<-rbind(NAs,dat)
is.factor(dat_backward$x)
is.character(dat_backward$x)
Run Code Online (Sandbox Code Playgroud)
现在x被强迫角色等级.我很困惑 - 即使我使用其他绑定顺序,也不能保留因子类型?为实现目标,我的代码会有什么直接的变化?
这里还有其他问题可以解决同一个问题,但我没有意识到如何在此基础上解决我的问题.所以,我有5个数据帧,我想使用rbind合并一个唯一数据框中的行,但它返回错误:
"错误row.names<-.data.frame(*tmp*,值=值):'row.names'重复不允许另外:警告消息:设置'row.names'时的非唯一值:'1','10','100','1000 ','10000','100000','1000000','1000001 [....]"
数据框具有相同的列但行数不同.我认为rbind命令将第一列作为row.names.因此尝试在五个数据框中放置一个顺序ID,但它不起作用.我试图通过row.names()在数据框中指定顺序行名,但也没有成功.合并命令不是我认为的选项,因为5个数据帧和连续的合并将覆盖先例.我只使用id创建了一个新数据框并试图加入,但结果数据框不会附加连接df的列.
关注df 1的摘录:
id image power value pol class
1 1 tsx_sm_hh 0.1834515 -7.364787 hh FR
2 2 tsx_sm_hh 0.1834515 -7.364787 hh FR
3 3 tsx_sm_hh 0.1991938 -7.007242 hh FR
4 4 tsx_sm_hh 0.1991938 -7.007242 hh FR
5 5 tsx_sm_hh 0.2079365 -6.820693 hh FR
6 6 tsx_sm_hh 0.2079365 -6.820693 hh FR
[...]
1802124 1802124 tsx_sm_hh 0.1991938 -7.007242 hh FR
Run Code Online (Sandbox Code Playgroud)
另外四个df是相同的结构,除了'id'列之外没有重复的数字.'pol'和'image'列定义为级别.并all.pol <- rbind(df1,df2,df3,df4,df5)返回row.names重复的此错误.
任何的想法?
提前致谢
我有一个data.frame有几列,我想加入一个新的data.frame中的一列.
df1 <- data.frame(col1 = 1:3, col2 = 4:6, col3 = 7:9)
Run Code Online (Sandbox Code Playgroud)
如何使用1:9的单列创建新的data.frame?
我有超过50 data.frames在我的工作环境,我想rbind.有没有一种方法来rbind的data.frames与不必键入出每个出date.frame?
我一直在做的例子:
df <- rbind(A, B, C, D, E, F)
Run Code Online (Sandbox Code Playgroud)
我试过了:
df <- rbind(ls())
Run Code Online (Sandbox Code Playgroud)
但这只是创建了我工作环境中所有data.frames的名称列表.