r - 如果列不同,则用字符串分隔列

标签 r dplyr tidyr

我有一个数据框,如果它们包含不同的字符串或单词,我想分割它们的列。

我在 R 中尝试了不同的方法,但它不起作用

我的数据框如下所示:

df <- data.frame(x = c(NA, "TAP1", "TAP1", "TAP2"), y = c("TAP1", "TAP2", "TAP2", "TAP3" ))

例如,我正在尝试使用第一列:

df <- data.frame(x = c(NA, "TAP1", "TAP1", "TAP2"))
df %>% separate(x, c("TAP1", "TAP2"), extra = "drop", fill = "right")

但不工作

我有下一个输出:

TAP1 TAP2
1 <NA> <NA>
2 TAP1 <NA>
3 TAP1 <NA>
4 TAP2 <NA>

我的预期输出是:

 TAP1 TAP2
1 <NA> <NA>
2 TAP1 <NA>
3 TAP1 <NA>
4 <NA> TAP2

我想对完整数据框中的所有列执行相同的操作,其中我有不同的单词组合,例如 TAP1、TAP2、TAP3 ... 等。

在此示例中,考虑列 x 和 y 的最终表将是。

 df <- data.frame(x = c(NA, "TAP1", "TAP1", "TAP2"), y = c("TAP1", "TAP2",   "TAP2", "TAP3" ))

  TAP1 TAP2 TAP1.1 TAP2.2 TAP3.3
1 <NA> <NA> TAP1   <NA>   <NA>
2 TAP1 <NA> <NA>   TAP2   <NA>
3 TAP1 <NA> <NA>   TAP2   <NA>
4 <NA> TAP2 <NA>   <NA>   TAP3

最佳答案

我们可以通过spread来做到这一点

library(tidyverse)
df %>% 
   mutate(n = row_number()) %>% 
   group_by(x) %>% 
   mutate(rn = row_number(), y = x) %>%
   spread(y, x) %>% 
   select(TAP1, TAP2)
# A tibble: 4 x 2
#  TAP1  TAP2 
#  <fct> <fct>
#1 <NA>  <NA> 
#2 TAP1  <NA> 
#3 TAP1  <NA> 
#4 <NA>  TAP2 

通过多列,我们可以聚集传播

rownames_to_column(df, 'rn') %>%
   gather(key, val, -rn) %>%
   mutate(val1 = val) %>% 
   unite(val, val,key) %>% 
   group_by(val) %>%    # not really need for this example
   mutate(ind = row_number()) %>% # not needed here though
   spread(val, val1) %>%
   select(starts_with("TAP"))
# A tibble: 4 x 5
# TAP1_x TAP1_y TAP2_x TAP2_y TAP3_y
#  <chr>  <chr>  <chr>  <chr>  <chr> 
#1 <NA>   TAP1   <NA>   <NA>   <NA>  
#2 TAP1   <NA>   <NA>   TAP2   <NA>  
#3 TAP1   <NA>   <NA>   TAP2   <NA>  
#4 <NA>   <NA>   TAP2   <NA>   TAP3  

关于r - 如果列不同,则用字符串分隔列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56364339/

相关文章:

r - 合并两个 SpatialPolygonsDataFrame 对象

linux - RStudio 服务器导出功能背后的代码

r - 如何在 R 中聚合关闭时间事件

r - 如何将数据帧形式的条件传递到 dplyr::filter

r - 如何在 R 中使用正则表达式找到句子中的第一个空格

r - 如何使用 tidyverse 函数将一列的变量与其他列的数值相加

r - 将变量传递给 tidyr 的集合以重命名键/值列?

r - 使用 R 绘图下拉菜单选择变量并继续使用颜色变量作为跟踪

r - 基于多个列计算排名,具有优先规则

r - 在dplyr中重新编码和Mutate_all