我有两个数据框
> data1
LEVEL V1 V2
1 L1 a c
2 L2 b d
> data2
LEVEL V1 V2
1 L1 1 3
2 L2 2 4
如何创建第三个数据框
> data3
LEVEL V1 V2
1 L1 a_1 c_3
2 L2 b_2 d_4
优选在R中使用dplyr / tidyr
答案 0 :(得分:3)
您可rbind.data.frame
然后summarise_all
每LEVEL
data <- rbind.data.frame(data1, data2) # rbind data frames
data %>%
group_by(LEVEL) %>%
summarise_all(paste, collapse = "_")
# A tibble: 2 x 3
LEVEL V1 V2
<chr> <chr> <chr>
1 L1 a_1 c_3
2 L2 b_2 d_4
答案 1 :(得分:1)
以下是使用mapply
data.frame(data1[, 1, drop = FALSE],
mapply(FUN = paste, MoreArgs = list(sep = "_"), data1[,-1], data2[,-1]))
# LEVEL V1 V2
#1 L1 a_1 c_3
#2 L2 b_2 d_4
或使用tidyverse
library(purrr)
library(dplyr)
bind_cols(data2[, 1, drop = FALSE],
map2_df(.x = data1[, -1], .y = data2[, -1], .f = paste, sep = "_"))
# LEVEL V1 V2
#1 L1 a_1 c_3
#2 L2 b_2 d_4
数据强>
data1 <- read.table(text = "
LEVEL V1 V2
1 L1 a c
2 L2 b d", header = TRUE)
data2 <- read.table(text = "
LEVEL V1 V2
1 L1 1 3
2 L2 2 4", header = TRUE)
答案 2 :(得分:0)
根据您的示例,我假设您希望使用LEVEL
作为匹配两个表的键,并且您没有太多的变量需要处理。
df3 <- left_join(df1, df2, by="LEVEL")%>%
mutate(a=paste(a.x, a.y, sep="_"), b=paste(b.x, b.y, sep="_")) %>%
select_if(grepl("\\.", colnames(df3)) ==FALSE)