R - Как отформатировать вывод текста из списка - PullRequest
1 голос
/ 30 января 2020

У меня есть следующий фрейм данных:

  Name   Occupation    Country code   Remarks
  Mark   Engineer      1              Ok
  Jerry  Engineer      1              None
  Marie  Veterinarian  2              Ok
  Nolan  Veterinarian  2              Ok
  Max    Shepherd      2              Ok

Я хочу вывести фрейм данных в файлы .txt, используя следующие коды:

df1 <- structure(list(Name = c("Mark", "Jerry", "Marie", "Nolan", "Max"), 
                 Occupation = c("Engineer", "Engineer", "Veterinarian",
                                "Veterinarian", "Shepherd"), 
                 Countrycode = c(1L, 1L, 2L, 2L, 2L), 
                                 Remarks = c("Ok", "None", "Ok", "Ok", "Ok")), 
                 class = "data.frame", row.names = c(NA, -5L))

df2 <- transform(df1, NameRemarks = paste(Name, Remarks, sep=" - "))
                 [, c("NameRemarks", "Occupation", "Countrycode")]

lst1 <- lapply(split(df2[-3], df2$Countrycode), 
           function(x) split(x['NameRemarks'], x$Occupation))

Map(capture.output, lst1, file = paste0("output", seq_along(lst1), ".txt"))

Однако вывод output2.txt :

 $Shepherd
   NameRemarks
 5    Max - Ok

 $Veterinarian
   NameRemarks
 3  Marie - Ok
 4  Nolan - Ok

Это также относится и к output1.txt. Я хочу очистить форматирование в:

 Shepherd
 Max - Ok

 Veterinarian
 Marie - Ok
 Nolan - Ok

1 Ответ

1 голос
/ 30 января 2020

В этом случае мы можем сделать одно разбиение, paste «Занятие» со столбцом «NameRemarks» и cat для создания новых файлов

lst2 <- split(df2[-3], df2$Countrycode)
lapply(names(lst2), function(nm)  with(lst2[[nm]], {
  v1 <- tapply(NameRemarks, Occupation, FUN = paste, collapse="\n")
   cat(paste(names(v1), v1, sep="\n"), 
       file = paste0("output", nm, ".txt"), sep='\n\n')
   }))

-выходы

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...