在R编程中连接来自不同列的替换字符

时间:2018-04-18 23:27:09

标签: r concatenation

我有一个2列的df。我需要在Col3中组合Col1和Col2 - 由“>”分隔的替代文本A1-B1; A2-B2; A3-B3; ...

实施例

|      Col1       |           Col2   |            Col3              |

| abcd > de > efg | ppppp > ppt > pp | abcd-ppppp > de-ppt > efg-pp | 

| hij > kl > iiii | aaa > bbb > hhh  | hij-aaa > kl-bbb > iiii-hhh  | 

| aa              | fff              | aa-fff                       | 

| a > bbb         |  pp > a          | a-pp > bbb-a                 | 

...

如何在R编程中执行此操作? 感谢

1 个答案:

答案 0 :(得分:0)

这是一个难以解决的问题。在未来,为了我们的理智,请考虑如何输出数据。如果生成数据,您可以轻松解决这个问题,您可以考虑进行下游分析。无论如何,这里的解决方案就足够了。

让我们生成您的数据:

li:before {
  counter-increment: li;
  content: counter(item, decimal-leading-zero);
}

接下来使用Col1 <- c("abcd > de > efg", "hij > kl > iiii", "aa", "a > bbb") Col2 <- c("ppppp > ppt > pp", "aaa > bbb > hhh", "fff", "pp > a") dat <- data.frame(Col1, Col2, stringsAsFactors = FALSE) 我们剥离,分隔并展平applyCol1并添加第一个分隔符Col2

-

下一部分非常困难,经过大量谷歌搜索后,我找到了一个解决方案(一个黑客),用数字向量分割字符列表。

l1 <- apply(dat, 2, function(x) trimws(unlist(strsplit(x, split = ">"))))
l2 <- apply(l1, 1, function(x) paste0(x[1], "-", x[2]))

按“&gt;”的出现拆分#thanks: https://techoverflow.net/2012/11/10/r-count-occurrences-of-character-in-string/ #gets occurrences of ">" for later use countCharOccurrences <- function(char, s) { s2 <- gsub(char,"",s) return (nchar(s) - nchar(s2)) } o <- countCharOccurrences(">", dat$Col1)+1 df <- as.data.frame(l2, stringsAsFactors = FALSE) (即df)的值:

o

最后,我们会折叠数据框列表并添加最终分隔符# Thanks to this SO answer: # https://stackoverflow.com/questions/27132290/split-dataframe-by-row-number-in-r l2a <- split(df, cumsum(c(TRUE,(1:nrow(df) %in% cumsum(o))[-nrow(df)])))

>

然后与您的起始数据帧结合使用:

l3 <- lapply(l2a, function(x) paste(x[,1], collapse = " > "))

多田!

编辑:我忘记了dat$Col3 <- l3 Col1 Col2 Col3 1 abcd > de > efg ppppp > ppt > pp abcd-ppppp > de-ppt > efg-pp 2 hij > kl > iiii aaa > bbb > hhh hij-aaa > kl-bbb > iiii-hhh 3 aa fff aa-fff 4 a > bbb pp > a a-pp > bbb-a 是一个对象列表。您需要使用l3将它们展平为:

unlist