我在内存中有许多 data.tables,其名称遵循特定的模式(例如:RE_1、RE_2...CO_1、CO_2...)。我想有效地绑定它们以获得两个 data.tables(RE 和 CO)。
我试过:
RE <- rbindlist(ls(pattern = "RE"))
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:“rbindlist(ls(pattern = "RE")) 中的错误:rbindlist 的输入必须是 data.tables 列表”。
有没有办法制作这样一个“可用”的 data.tables (或数据框)列表?
给定两个矩阵:
test1 <- matrix(1:5,ncol=1)
test2 <- matrix(6:10,ncol=1)
Run Code Online (Sandbox Code Playgroud)
我想以交替的方式将它们逐行组合成一个矩阵,这意味着:
expected_output <- matrix(c(1,6,2,7,3,8,4,9,5,10),ncol=1)
Run Code Online (Sandbox Code Playgroud)
或更直观:
我已经创建了一个空矩阵,其长度是 test1 的两倍,但我缺少如何逐行添加每个值。rbind()只是将整个矩阵相加。
我有很多变量,我使用这样的代码创建:
for (i in 1:10) {
assign(paste0("variable", i), i )}
Run Code Online (Sandbox Code Playgroud)
我现在需要在变量上使用rbind来组合它们.我尝试过这样的事情无济于事:
rbind(assign(paste0("variable", 1:10)))
Run Code Online (Sandbox Code Playgroud)
有关该怎么办的任何建议?
我使用以下代码:
tempdata <- rbind(tempdata,newdata) # bind rowwise
Run Code Online (Sandbox Code Playgroud)
据我所知,需要定义tempdata(像所有对象,变量......).因为只有数值,我将其定义为tempdata<-0.这不是一个非常大的问题,但是在之后使用rbind时,第一行0保留在第一位,我必须使用某种
tempdata<-tempdata[-1,] # deletes first row
Run Code Online (Sandbox Code Playgroud)
我无法将其定义为tempdata<-'',因为这将是一个角色,对吧?
好吧,正如我所说,对我来说不是一个问题,但是会有更好的方法,特别是如果我或某人会rbind()在代码中多次使用,因此第一行可能不仅要"清除"一次......
使用时可能会出现同样的问题cbind().
也许有人知道更好的解决方案?
我试图将许多数据帧绑定到一个大型数据帧.数据帧按顺序命名df1,第一个命名,第二个命名df2,第三个命名df3等.目前,我已经通过显式键入数据帧的名称将这些数据帧绑定在一起; 然而,对于非常大量的数据帧(预期总共大约10,000个数据帧),这是次优的.
这是一个工作示例:
# Load required packages
library(plyr)
# Generate 100 example data frames
for(i in 1:100){
assign(paste0('df', i), data.frame(x = rep(1:100),
y = seq(from = 1,
to = 1000,
length = 100)))
}
}
# Create a master merged data frame
df <- rbind.fill(df1, df2, df3, df4, df5, df6, df7, df8, df9, df10,
df11, df12, df13, df14, df15, df16, df17, df18, df19, df20,
df21, df22, df23, df24, df25, df26, df27, df28, df29, df30, …Run Code Online (Sandbox Code Playgroud) 初始数据框mergedDf是
PROD_CODE
1 PRD0900033,PRD0900135,PRD0900220,PRD0900709
2 PRD0900097,PRD0900550
3 PRD0900121
4 PRD0900353
5 PRD0900547,PRD0900614
Run Code Online (Sandbox Code Playgroud)
打电话后
mergedDf<-data.frame(do.call('rbind', strsplit(as.character(mergedDf$PROD_CODE),',',fixed=TRUE)))
Run Code Online (Sandbox Code Playgroud)
输出变为
X1 X2 X3 X4
1 PRD0900033 PRD0900135 PRD0900220 PRD0900709
2 PRD0900097 PRD0900550 PRD0900097 PRD0900550
3 PRD0900121 PRD0900121 PRD0900121 PRD0900121
4 PRD0900353 PRD0900353 PRD0900353 PRD0900353
5 PRD0900547 PRD0900614 PRD0900547 PRD0900614
Run Code Online (Sandbox Code Playgroud)
似乎多余的行正在重新填充.
我尝试使用bind_rows(),rbind_all()但这些需要将拆分的更改为data.frame,这是我无法做到的.我也尝试使用rbindlist()哪个也需要data.frame作为参数.
我需要输出.这些职位并不重要.
X1 X2 X3 X4
1 PRD0900033 PRD0900135 PRD0900220 PRD0900709
2 PRD0900097 PRD0900550 NA NA
3 PRD0900121 NA NA NA
4 PRD0900353 NA NA NA …Run Code Online (Sandbox Code Playgroud) 尝试将R上的2个data.frame与rbind合并
data.combined <- rbind(train, test.survived)
在match.names(clabs,names(xi))中出错:名称与先前的名称不匹配
我有两个数据框,如下所示:
和
我想得到这样的东西:
以下是可重复性的数据框:
df1 <- data.frame(descripcion_cuenta_N2 = c("Consumos", "Costes Personal", "Fungible Equipamiento", "Servicios"), anualidad = rep(2014, 4), valor = c(10, 11, 12, 13))
df2 <- data.frame(descripcion_cuenta_N2 = c("Consumos", "Costes Personal", "Fungible Equipamiento","Prestaciones", "Servicios"), anualidad = rep(2014, 5), valor = c(11, 20, 8, 9))
Run Code Online (Sandbox Code Playgroud)
A dataframe in which missed positions are filled with 0, because in some cases I am not getting data frames with the same amount of rows, and in those cases rbind fails, and I get an …
我有两个不同长度的数据帧(n=3012 和 3008),我需要根据日期进行合并。我曾尝试使用合并和 rbindfill 函数,但没有成功。两个数据帧之间的公共线程是 date_time 但是两个 df2 都没有与 df1 相同的值。
df1
ID date_time Q_cfs Data_Code
68 2016-11-01 00:00:00 353 P
69 2016-11-01 00:15:00 356 P
70 2016-11-01 00:30:00 357 P
71 2016-11-01 00:45:00 356 P
72 2016-11-01 01:00:00 358 P
73 2016-11-01 01:15:00 355 P
Run Code Online (Sandbox Code Playgroud)
df2
ID stage date_time
1 4.82 2016-11-01 00:00:00
2 4.83 2016-11-01 00:15:00
3 4.84 2016-11-01 00:30:00
4 4.85 2016-11-01 00:45:00
5 4.86 2016-11-01 01:00:00
6 4.87 2016-11-01 01:15:00
Run Code Online (Sandbox Code Playgroud)
我尝试使用合并(如下)但它不起作用,因为列长度不同。
DF_New<- merge(df1,df2, by.x = df1$date_time, …Run Code Online (Sandbox Code Playgroud) 我有一系列日期:
date_rng <- seq( as.Date("2008-01-01"), as.Date("2008-12-31"), by="+1 day")
Run Code Online (Sandbox Code Playgroud)
我有一些辅助功能,这些功能必然与问题相关,我会尝试将它们排除在外.
我从第一个日期开始并调用此函数:
# Function for getting weather table by airport code and date and return dataframe
get_table <- function(code, date){
adv <- sprintf(
"https://www.wunderground.com/history/airport/K%s/2008/%s/%s/DailyHistory.html",
code, month(date), day(date)
)
h <- adv %>% read_html()
t <- h%>%
html_nodes(xpath = '//*[@id="obsTable"]') %>%
html_table()
df <- data.frame(t)
return(df)
}
atl_weather <- get_table("ATL", date_rng[1])
Run Code Online (Sandbox Code Playgroud)
现在我迭代剩下的日期为每个日期创建一个新的df然后我尝试附加到原始日期:
# Loop through remaining dates and bind dfs
for(d in as.list(date_rng[2:4])){
rbind(atl_weather, get_table("ATL", d), d)
}
Run Code Online (Sandbox Code Playgroud)
但绑定不会发生,我留下了在for循环之前创建的范围中第一个日期的原始数据帧.
这有效:
atl_weather <- get_table("ATL", …Run Code Online (Sandbox Code Playgroud)