Сложная проблема с вставкой 5 групп столбцов в R - PullRequest
0 голосов
/ 07 декабря 2018

В качестве дополнения к проблеме, которую я разместил по следующей ссылке,

Проблема с вставкой 5 групп столбцов в 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 голосов
/ 07 декабря 2018
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 = "-")
})
0 голосов
/ 07 декабря 2018

Предполагая, что все ваши столбцы имеют тип character, что в первых 5 столбцах каждой строки всегда есть хотя бы одно значение, и при условии, что вы назвали свой data.frame "df", следующее должносделать трюк:

df$output <- rep(NA, nrow(df))
for(i in 1:nrow(df)){
  if(!all(df[i, 6:10] == "")){
    df$output[i] <- paste0(paste0(df[i, 1:5], collapse = ""), "-",
                           paste0(df[i, 6:10], collapse = ""))
  } else {
    df$output[i] <- paste0(df[i, 1:5], collapse = "")
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...