Как объединить строки, а также переместить столбцы в объединенную строку? - PullRequest
0 голосов
/ 01 июня 2019

Привет всем и спасибо за чтение моего вопроса.

У меня есть следующее в R:

**type, status, count**
human, living, 36
human, living, 57
human, dead, 43
mouse, living, 4
mouse, dead 8

То, что я хочу сделать, это объединить строки, основанные на «типе» (поэтому «тип» будет исключительным), а затем переместить содержимое «status» и «count» в объединенную строку и добавить некоторые символы, как показано ниже :

**type, status, count**
human, living = "36, 57", dead = "43"
mouse, living = "4", dead = "8"

Мне удалось объединить строки в R (вроде), но я не могу понять, как переместить статус и сосчитать в объединенную строку и выложить их, как показано.

Мне не нужно использовать R, но я думал, что R - самый подходящий способ сделать это, но я мог использовать что угодно, чтобы выполнить работу. Любая помощь будет принята с благодарностью.

Большое спасибо.

Редактировать: Это окончательное решение, которое отлично работало (спасибо большое за gersht):

rm(list=ls()); 

library(tidyr)
library(dplyr)

df <- read.table("D:/test.csv", header = TRUE, sep=",")

df <- df %>%
    group_by(type, status) %>% 
    mutate(count = paste(count, collapse = ", ")) %>% 
    ungroup() %>% 
    distinct() %>% 
    spread(status, count) %>% 
    mutate(dead = paste("dead = ", dead),
           living = paste("living = ", living))


write.table(df, col.names = FALSE)

1 Ответ

1 голос
/ 01 июня 2019

Это вернет фрейм данных с правильными значениями, более или менее. При необходимости вы можете изменить порядок столбцов и имена столбцов:

library(tidyr)
library(dplyr)

df %>% 
    group_by(type, status) %>% 
    mutate(count = paste(count, collapse = ", ")) %>% 
    ungroup() %>% 
    distinct() %>% 
    spread(status, count) %>% 
    mutate(dead = paste("dead = ", dead),
           living = paste("living = ", living))

#### OUTPUT ####

# A tibble: 2 x 3
  type  dead       living          
  <chr> <chr>      <chr>           
1 human dead =  43 living =  36, 57
2 mouse dead =  8  living =  4     

Я просто сгруппировал по type и status, поэтому я могу свернуть значения count в одну строку, используя mutate(). Я использую ungroup() в качестве хорошей практики, но это не является строго необходимым.

Это создает несколько дубликатов, которые я удаляю с помощью distinct(). Затем я использую функцию spread() для перемещения living и dead в свои собственные столбцы, а затем снова использую mutate, чтобы добавить строки "living = " и "dead = " в соответствующие столбцы.

данные

structure(list(type = c("human", "human", "human", "mouse", "mouse"
), status = c("living", "living", "dead", "living", "dead"), 
    count = c(36, 57, 43, 4, 8)), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...