在R中粘贴5个列组的复杂问题

时间:2018-12-07 17:41:48

标签: r dataframe concatenation

作为对该问题的扩展,我在以下链接中发布了

Issue with pasting 5 columns groups in R

我现在有一个如下表。

Table:

V29  V30  V31  V32  V33  V34 V35 V36 V37 V38 
044  N    006  E    011  044 N   006 E   012 
045  N    007  E    028  NA  NA  NA  NA  NA

我想获得下表,每行粘贴5个列组。但是,粘贴时请删除NA列。

Output:

    V29  V30  V31  V32  V33  V34 V35 V36 V37 V38   output
    044  N    006  E    011  044 N   006 E   012   044N006E011-044N006E012
    045  N    007  E    028  NA  NA  NA  NA  NA    045N007E028

非常感谢您的帮助。

谢谢。

2 个答案:

答案 0 :(得分:0)

假设您的所有列均为character类型,则假设每行的前5列中始终至少有一个值,并假设您已调用data.frame“ {{1} }”以下代码应该可以解决问题:

df

答案 1 :(得分:0)

df = read.table(
  text = "
  V29  V30  V31  V32  V33  V34 V35 V36 V37 V38
  044    N  006    E  011  044   N 006   E 012
  045    N  007    E  028   NA  NA  NA  NA  NA",
  header = T
)

grp = c(rep(1, 5), rep(2, 5))
apply(df, 1, function(x)
{
  z=sapply(split(unlist(x), grp), function(y)
  {
    if (is.na(y[1]))
      ""
    else
      paste0(trimws(y), collapse = "")
  })

  if(z[2]=="")
    paste0(z, collapse = "")
  else
    paste0(z, collapse = "-")
})