我有一个很大的数据库,我无法在这里制作它们。我有两个数据数据库如下所示。
df1 <- read.table(text="A1 B1 C1 D1 E1
1234Z 721 224 223 987L
224 321 224 331 987L
321 321 224 441 141
321 440 456Y 331 141
321 1234Q 456Y 441 321
218 221 456Y 12A 321
218 440 19 223 321
161 1234Q 19 12A 123Q
1234Z 123Q 77 11A 123Q", header=TRUE)
df2 <- read.table(text=" BCG1 BCG2 BCG3 BCG4 BCG5
1 11 13 18 24
4 9 13 19 24
5 9 13 20 22
5 10 14 19 22
5 6 14 20 23
3 8 14 17 23
3 10 12 18 23
2 6 12 17 21
1 7 15 16 21", header=TRUE)Df1是由df2编码的因子。我使用了以下代码:
df3 <- do.call(cbind.fill, c(Map(function(x,y)
data.frame(col=x,col2=unique(y)),
lapply(df1,unique),split(df2, col(df2))))
names(df3)<-c(rbind(df1), paste0("Zo", seq_along((df1))))我想要得到下表
A1 BCG1 B1 BCG2 C1 BCG3 D1 BCG4 E1 BCG5
1234Z 1 721 11 224 13 223 18 987L 24
224 4 321 9 456Y 14 331 19 141 22
321 5 221 8 19 12 441 20 321 23
218 3 440 10 77 15 12A 17 123Q 21
161 2 1234Q 6 11A 16
123Q 7 我愿意接受其他密码。谢谢你的帮忙
发布于 2020-02-18 21:33:46
试试看以下几点。
library(dplyr)
library(purrr)
df3 <- c(df1, df2) %>%
`[`(c(matrix(names(.), nrow = 2, byrow = T))) %>%
map(~ as.character(unique(.))) %>%
map_dfc(`[`, 1:max(lengths(.))) %>%
mutate_all(coalesce, "")
# # A tibble: 6 x 10
# A1 BCG1 B1 BCG2 C1 BCG3 D1 BCG4 E1 BCG5
# <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# 1 1234Z 1 721 11 224 13 223 18 987L 24
# 2 224 4 321 9 456Y 14 331 19 141 22
# 3 321 5 440 10 19 12 441 20 321 23
# 4 218 3 1234Q 6 77 15 12A 17 123Q 21
# 5 161 2 221 8 "" "" 11A 16 "" ""
# 6 "" "" 123Q 7 "" "" "" "" "" "" 结果df3是一个tbl对象,默认情况下空字符串将被打印为""。如果您不想看到引号,有两种选择:
as.data.frame(df3)print.data.frame(df3)前者将df3从tbl强制转换为data.frame,而后者不改变对象的类。
结果将是
# A1 BCG1 B1 BCG2 C1 BCG3 D1 BCG4 E1 BCG5
# 1 1234Z 1 721 11 224 13 223 18 987L 24
# 2 224 4 321 9 456Y 14 331 19 141 22
# 3 321 5 440 10 19 12 441 20 321 23
# 4 218 3 1234Q 6 77 15 12A 17 123Q 21
# 5 161 2 221 8 11A 16
# 6 123Q 7 https://stackoverflow.com/questions/60287858
复制相似问题