【问题标题】:Concatenating each element of a data frame in R在R中连接数据框的每个元素
【发布时间】:2020-02-12 08:23:34
【问题描述】:

我想将数据框的每个元素与相同大小的数据框的相应元素连接起来。这是我需要合并的两个数据框的示例:

# A tibble: 3 x 2
      X     Y
  <dbl> <dbl>
1     9     5
2     5    10
3     1     4

# A tibble: 3 x 2
  X     Y    
  <chr> <chr>
1 (10%) (5%) 
2 (3%)  (9%) 
3 (22%) (9%) 

输出如下:

# A tibble: 3 x 2
  X       Y      
  <chr>   <chr>  
1 9 (10%) 5 (5%) 
2 5 (3%)  10 (9%)
3 1 (22%) 4 (9%)

这是前两个对象的数据:

library(tidyverse)

structure(list(X = c(9, 5, 1), Y = c(5, 10, 4)), row.names = c(NA, 
-3L), class = c("tbl_df", "tbl", "data.frame"))

structure(list(X = c("(10%)", "(3%)", "(22%)"), Y = c("(5%)", 
"(9%)", "(9%)")), row.names = c(NA, -3L), class = c("tbl_df", 
"tbl", "data.frame"))

感谢您的帮助!

【问题讨论】:

  • df1[] &lt;- Map(paste, df1, df2) 应该可以解决问题
  • 或者,整洁的方法是使用purrr::pmap_df(list(df1, df2), paste)

标签: r merge concat


【解决方案1】:

使用您上面的数据,我幸运地尝试了以下方法。

注意:我重命名了变量以使绑定和联合调用更加清晰:

library(tidyverse)

dat1 <- structure(list(W = c(9, 5, 1), X = c(5, 10, 4)), row.names = c(NA, 
                                                               -3L), class = c("tbl_df", "tbl", "data.frame"))

dat2 <- structure(list(Y = c("(10%)", "(3%)", "(22%)"), Z = c("(5%)", 
                                                      "(9%)", "(9%)")), row.names = c(NA, -3L), class = c("tbl_df", 
                                                                                                          "tbl", "data.frame"))

dat3 <- cbind(dat1, dat2) %>% 
        unite('X2', c('W','Y')) %>% 
        unite('Y2', c('X','Z'))

【讨论】:

  • 这很好用!我选择了 akrun 的答案,因为它允许使用更动态的分隔符参数。
【解决方案2】:

我们可以使用map2

library(purrr)
library(stringr)
map2_df(df1, df2, str_c, sep=" ")
# A tibble: 3 x 2
#  X       Y      
#   <chr>   <chr>  
#1 9 (10%) 5 (5%) 
#2 5 (3%)  10 (9%)
#3 1 (22%) 4 (9%) 

【讨论】:

    猜你喜欢
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 2022-07-13
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多