基于delim的独立行基于r中的两列

梅尔

我有以下df:

df_1=data.frame(col_1=c("a;b;c","c;d","e","f","g","h;j"),col_2=c("1;2;3","4","5;6","7","8;9","10;11;12"))

所以我想将col_1分隔为具有col_2对应值(如果存在)的单独行。

  1. 例如,如果col_1中的元素数= col_2中的元素数,则应将它们与col_1和col_2中的相应值分开(第1行)

  2. 如果它们具有不同数量的元素,如果一列只有一个元素,那么也可以将其分为不同的行(第2行)

  3. 如果它们的元素数量不成比例(每个元素超过1个且不相等),则应保持原样

这是final_dataset:

df_2=data.frame(col_1=c("a","b","c","c","d","e","e","f","g","g","h;j"),col_2=c("1","2","3","4","4","5","6","7","8","9","10;11;12"))
阿克伦

我们可以用 cSplit

library(splitstackshape)
library(zoo)

cnt1 <- nchar(gsub(";", "", df_1$col_1))
cnt2 <- nchar(gsub(";", "", df_1$col_2))
i1 <- cnt1 != cnt2 & cnt1 > 1 & cnt2 > 1
rbind(cSplit(df_1[!i1,], c('col_1', 'col_2'), sep=";", "long")[
          !is.na(col_1)|!is.na(col_2), lapply(.SD, na.locf0)], df_1[i1,])
#     col_1    col_2
# 1:     a        1
# 2:     b        2
# 3:     c        3
# 4:     c        4
# 5:     d        4
# 6:     e        5
# 7:     e        6
# 8:     f        7
# 9:     g        8
#10:     g        9
#11:   h;j 10;11;12

或使用base R所有约束

cnt1 <- nchar(gsub(";", "", df_1$col_1))
cnt2 <- nchar(gsub(";", "", df_1$col_2))
i1 <- cnt1 != cnt2 & cnt1 > 1 & cnt2 > 1
   
lst1 <- lapply(df_1[!i1, ], function(x) strsplit(x, ";"))
out <- rbind(do.call(rbind, Map(function(x, y) {
       l1 <- length(x)
       l2 <- length(y)
       mx <- max(l1, l2)
       x <- if(l1 != l2 &  l1 == 1) rep(x, mx) else x
       y <- if(l1 != l2 & l2 == 1) rep(y, mx) else y
       data.frame(col_1 = x, col_2 = y) } ,
       lst1[[1]], lst1[[2]])), df_1[i1,])
   
row.names(out) <- NULL
out
#   col_1    col_2
#1      a        1
#2      b        2
#3      c        3
#4      c        4
#5      d        4
#6      e        5
#7      e        6
#8      f        7
#9      g        8
#10     g        9
#11   h;j 10;11;12

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

r中基于两列的累积总和

来自分类Dev

R中基于列内容的行重复

来自分类Dev

如何基于两列中的值在Excel中隐藏行

来自分类Dev

基于两行的值在列中返回值?

来自分类Dev

基于两列的表中的唯一行

来自分类Dev

如何基于R中两列的值创建虚拟变量?

来自分类Dev

基于r中两列的频率计数

来自分类Dev

如何基于R中的两列生成序列?

来自分类Dev

基于 R 中列中的公共元素的行划分

来自分类Dev

MySQL基于两列选择行

来自分类Dev

如何基于两列选择行

来自分类Dev

如何基于工作表中的两个独立列计算一列中的唯一值

来自分类Dev

R中基于列值的行之间的差异

来自分类Dev

基于列的条件和在R中重复(按行)

来自分类Dev

R中基于列值的行之间的差异

来自分类Dev

如何基于3列的总和删除R中的行组

来自分类Dev

仅在重复的行中删除在特定列中包含NA的行(基于其他两列)

来自分类Dev

切换R中的语句,以基于列值将每行替换为两个新行

来自分类Dev

两列中基于年度的价值比例

来自分类Dev

基于两列的排名

来自分类Dev

基于R中两个不同组的两行的条件差

来自分类Dev

R数据框基于列组合行

来自分类Dev

R-我们如何基于两列值之间的逻辑参数删除行

来自分类Dev

R:将数据列附加到频率帧基于两列的数据帧中

来自分类Dev

JDBC Discover行基于列中的值

来自分类Dev

基于列引用行中的值

来自分类Dev

基于R中的向量重复矩阵的行

来自分类Dev

Excel宏基于行中其他两个列的值写入值

来自分类Dev

如何基于同一表数据的两列从表中删除行?