r - 将多个数据框粘贴在一起,同时将数据保留在特定的行和列中
问题描述
所以现在我有一个包含 230 行和 15132 列的主数据框(所有都标有特定的列和行名称),每个观察值中存储的值为 0。我有多个具有不同列和行的数据框,我想将它们粘贴到此主数据框中,同时保持正确的位置。这些数据帧中的每一个都由主数据帧的行/列名称的各种组合组成。我该怎么做呢?
dempty <- data.frame(matrix(0, nrow = 5, ncol = 5))
rownames(dempty) <- c("v", "w", "x", "y", "z")
colnames(dempty) <- c("a", "b", "c", "d", "e")
d1 <- data.frame(matrix(1, nrow = 2, ncol = 3))
rownames(d1) <- c("x", "y")
colnames(d1) <- c("b", "c", "d")
d2 <- data.frame(matrix(2, nrow = 3, ncol = 4))
rownames(d2) <- c("v", "w", "x")
colnames(d2) <- c("a", "b", "c", "d")
d3 <- data.frame(matrix(3, nrow = 4, ncol = 2))
rownames(d3) <- c("w", "x", "y", "z")
colnames(d3) <- c("d", "e")
dfinal <- data.frame(matrix(c(2, 2, 2, 0, 0, 2, 2, "1;2", "1;2", 0, 2, 2, "1;2", "1;2", 0, 2, "2;3", "1;2;3", "1;3", 3, 0, 3, 3, 3, 3), nrow = 5, ncol= 5))
rownames(dfinal) <- c("v", "w", "x", "y", "z")
colnames(dfinal) <- c("a", "b", "c", "d", "e")
解决方案
此循环应填充dfinal
来自df1
、df2
和的值df3
。它可以很容易地针对您的实际问题进行编辑。
## get row an col names of master data to be populated
cols<-names(dfinal)
rows<-row.names(dfinal)
## iterate through the master data frame
for(i in 1:length(cols)){
for(j in 1:length(rows)){
## if df1 contains matching col/row names use ifelse to replace
if(cols[i] %in% names(df1) & rows[j] %in% row.names(df1)){
## if current row/col in dfinal is still 0 replace with df1 value, else append df1 value
dfinal[rows[j],cols[i]] <- ifelse(dfinal[rows[j],cols[i]] == 0, df1[rows[j],cols[i]], paste0(dfinal[rows[j],cols[i]],";",df1[rows[j],cols[i]]))
}
## if current row/col in dfinal is still 0 replace with df2 value, else append df2 value
if(cols[i] %in% names(df2) & rows[j] %in% row.names(df2)){
## if current row/col in dfinal is still 0 replace with df2 value, else append df2 value
dfinal[rows[j],cols[i]] <- ifelse(dfinal[rows[j],cols[i]] == 0, df2[rows[j],cols[i]], paste0(dfinal[rows[j],cols[i]],";",df2[rows[j],cols[i]]))
}
## if current row/col in dfinal is still 0 replace with df3 value, else append df3 value
if(cols[i] %in% names(df3) & rows[j] %in% row.names(df3)){
## if current row/col in dfinal is still 0 replace with df3 value, else append df3 value
dfinal[rows[j],cols[i]] <- ifelse(dfinal[rows[j],cols[i]] == 0, df3[rows[j],cols[i]], paste0(dfinal[rows[j],cols[i]],";",df3[rows[j],cols[i]]))
}
}
}
我希望这有帮助!
推荐阅读
- javascript - Typescript 三元运算符简写形式
- java - spring cloud stream kafka 在优雅关闭时已经轮询的事件会发生什么
- python - Python - 使用 pandas.plot.hist() 时如何对浮点数进行 bin 处理
- css - Tailwind CSS 如何在 React 中设置 href 链接的样式?
- javascript - 如何在 Google Analytics 目标中通过 Add To Cart 事件的事件值?
- django - 我以与用户表的一对一关系创建了一个额外的表额外表。如何在用户注册中显示电话字段
- c++ - C++ 替换:用 v.at(x) 替换每次出现的 v[x]
- python - 如何更改表单 CharField 中的默认空代表?
- android - 如何检查谷歌地图是否仅由用户手势(平移,倾斜,捏......)而不是以编程方式移动
- pytorch - 运行 pytorch 几何获取 CUDA 错误:调用 `cublasCreate(handle)` 时出现 CUBLAS_STATUS_NOT_INITIALIZED