Как сделать из столбца имя столбца его значением? - PullRequest
2 голосов
/ 07 февраля 2020

У меня есть данные ниже

df<- data_frame(State= c('CA', 'IN', 'CHI'),
       Age= c(46,29,32),
       Status= c('Employed', '', 'Employed')
       )

В конце я хочу создать данные, которые выглядят так:

df<- data_frame(col1= c('State-CA', 'State-IN', 'State-CHI'),
       col2= c('Age-46','Age-29','Age-32'),
       col3= c('Status-Employed', '', 'Status-Employed')
       )

Соединение имени столбца и его значения с да sh. Если значение отсутствует, имя столбца не должно соединяться со значением таблицы. Может ли кто-нибудь помочь? Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 07 февраля 2020

С imap это один шаг. Поскольку data.frame s названы list со столбцами, равными length, imap зацикливается на list, с анонимным вызовом функции (~), получает .y в качестве имени столбца и значения как .x, затем paste это с str_c

library(purrr)
library(stringr)
imap_dfc(df, ~ case_when(.x ==""|is.na(.x) ~ as.character(.x), TRUE ~ str_c(.y, .x, sep='-')))
# A tibble: 3 x 3
#  State     Age    Status         
#  <chr>     <chr>  <chr>          
#1 State-CA  Age-46 Status-Employed
#2 State-IN  Age-29 ""      
#3 State-CHI Age-32 Status-Employed

In base R

df[] <- Map(function(x, y) ifelse(x=="", x, paste(x, y, sep="-")),df, names(df))
1 голос
/ 07 февраля 2020

Я думаю, что вы ищете ответили в этой теме - Вставьте имя столбца в его значение, используя R . Надеюсь, вы найдете это полезным!

Кроме того, этот код должен работать для вас -

col_names <- names(df)
for (c in col_names) {
  df[[c]] <- ifelse(df[[c]] != "", paste(c, df[[c]], sep = "-"), "")
}
df

Вывод -

 State    Age          Status
1 State-CA Age-46 Status-Employed
2 State-IN Age-29                
3 State-CHI Age-32 Status-Employed
...