Как печатать значения data.frame построчно - PullRequest
0 голосов
/ 23 октября 2018

Я хочу преобразовать data.frame в этот формат:

(col1row1Value, col2row1Value, ... colNrow1Value),
(col1row2Value, col2row2Value, ... colNrow2Value),
...
(col1rowNValue, col2rowNValue, ... colNrowNValue)  

это мое грязное решение:

convert <- function(df) {
  df <- data.frame(lapply(df, as.character), stringsAsFactors = F)

  result <- ""
  for(i in 1:nrow(df)) {
    x <- paste(df[i, ], collapse = ", ")
    result <- paste0(result, "(", x, "),\n" )
  }
  result <- substr(result, 1, nchar(result) - 1)
  result
}

тест:

cat(convert(iris[1:5,]))

любойидеи как улучшить это?

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Возможно с тидиверсом:

convert <- function (df) 
  df %>% mutate_if(Negate(is.character),as.character) %>%
    mutate(id=row_number()) %>%
    gather(k,v,-id) %>%
    group_by(id) %>% summarise(z=paste0("(",paste(v,collapse=", "),")")) %>%
    pull(z) %>% paste(collapse=",\n")

cat(convert(iris[1:5,]))
#(5.1, 3.5, 1.4, 0.2, setosa),
#(4.9, 3, 1.4, 0.2, setosa),
#(4.7, 3.2, 1.3, 0.2, setosa),
#(4.6, 3.1, 1.5, 0.2, setosa),
#(5, 3.6, 1.4, 0.2, setosa)
0 голосов
/ 23 октября 2018

Вот еще один способ сделать это (вы можете обернуть это в функцию, если хотите).

itest <- iris[1:5,] %>%
  mutate(Species = as.character(Species))

ct <- 1:nrow(itest)

tbl <- tibble()

for (i in ct) {

  r <- itest[i,]
  newct <- 1:ncol(r)

  vals <- character()

  for (i in newct) {

    new_val <- r[,i]

    vals <- c(vals,new_val)
  }

  new_tbl <- tibble(stringrow = paste(vals,collapse=', '))

  tbl <- bind_rows(tbl,new_tbl)

}

Результаты:

# A tibble: 5 x 1
  stringrow                 
  <chr>                     
1 5.1, 3.5, 1.4, 0.2, setosa
2 4.9, 3, 1.4, 0.2, setosa  
3 4.7, 3.2, 1.3, 0.2, setosa
4 4.6, 3.1, 1.5, 0.2, setosa
5 5, 3.6, 1.4, 0.2, setosa  
0 голосов
/ 23 октября 2018

Помогает ли это?

iris$new<- apply(iris, 1,paste0, collapse = ",")
print(apply(iris[,6, drop= F], 2, function(f) paste0("(", f, ")", collapse= ",")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...