如何复制特定行,但通过用逗号分隔r中的原始单元格的值来更改一列中的值



为了简化这个问题,我将使用数据集的一个非常基本的子集:

library(dplyr)
DF <- tibble(id = seq(1:4),
label = c("A", "B", "C", "D"),
val = c(NA, "5, 10", "20", "6, 7, 8"))
DF
# A tibble: 4 × 3
#      id label val    
#   <int> <chr> <chr>  
# 1     1 A     NA     
# 2     2 B     5, 10  
# 3     3 C     20     
# 4     4 D     6, 7, 8

注意:val只是包含在本例中没有意义的随机数,但如果有帮助,可以将它们视为一种ID号)。

在这个例子中,我想:

  • 标识val列中包含逗号的行(因为只有这些行需要更改)
  • 将每一行重复n次,使唯一改变的值在val列中并由单个数值组成(其中n是逗号分隔值的数量)

到目前为止,我只计算出下面的过滤器步骤:

DF %>% filter(val %>% stringr::str_detect(pattern = "[,]") == TRUE)

但我不确定如何从这里开始。

这是我想要的输出:

#      id label val    
#   <int> <chr> <chr>  
# 1     1 A     NA     
# 2     2 B     5
# 3     2 B     10
# 4     3 C     20     
# 5     4 D     6
# 6     4 D     7
# 7     4 D     8

任何帮助都是感激的,但我更喜欢避免任何循环。

谢谢:)

正如在评论中粘贴的链接中找到的答案所解释的那样,有几种方法可以解决这个问题。

最有效的方法可能是:

separate_rows(DF, val, sep = ", ")

你:

# A tibble: 7 × 3
id label val  
<int> <chr> <chr>
1     1 A     NA   
2     2 B     5    
3     2 B     10   
4     3 C     20   
5     4 D     6    
6     4 D     7    
7     4 D     8    

相关内容

  • 没有找到相关文章

最新更新