Как заполнить каждую ячейку во фрейме данных (номер столбца * в ячейке) в R? - PullRequest
0 голосов
/ 25 февраля 2020

Ниже приведен фрейм данных df.

Мне нужно заполнить каждую ячейку фрейма данных (номер столбца * в ячейке) в R. Начиная со столбца 2 (пицца), т. Е. Df [1 , 2]

Ввод:

   Name  pizza coke fries
1   Tom     1   NA    NA
2  Dick    NA    2     1
3 Harry     3   NA     1
4   Don    NA    2    NA
5  John     2   NA     1

Ожидаемый вывод:

   Name     pizza                   coke           fries
1   Tom     pizza                   <NA>           <NA>
2  Dick     <NA>                    coke coke      fries
3 Harry     pizza pizza pizza       <NA>           fries
4   Don     <NA>                    coke coke      <NA>
5  John     pizza pizza             <NA>           fries

1 Ответ

1 голос
/ 25 февраля 2020

Мы можем создать логический matrix на основе элементов не-NA в столбцах 'H CC'

nm1 <- names(df1)[startsWith(names(df1), 'HCC')]
i1 <- !is.na(df1[nm1])
df1[nm1][i1] <- nm1[col(df1[nm1])][i1]
df1
#  ID HCC_1 HCC_2 HCC_3
#1 P1 HCC_1  <NA>  <NA>
#2 P2  <NA> HCC_2 HCC_3
#3 P3 HCC_1  <NA> HCC_3
#4 P4  <NA> HCC_2  <NA>
#5 P5 HCC_1  <NA> HCC_3

Update

На основе обновленного набора данных

nm2 <- names(df2)[-1]
i2 <- !is.na(df2[nm2])
df2[nm2][i2] <-  trimws(strrep(paste0(nm2[col(df2[nm2])][i2], " "), df2[nm2][i2]))
df2
#   Name             pizza      coke fries
#1   Tom             pizza      <NA>  <NA>
#2  Dick              <NA> coke coke fries
#3 Harry pizza pizza pizza      <NA> fries
#4   Don              <NA> coke coke  <NA>
#5  John       pizza pizza      <NA> fries

данные

df1 <-  structure(list(ID = c("P1", "P2", "P3", "P4", "P5"), HCC_1 = c(1L, 
NA, 3L, NA, 6L), HCC_2 = c(NA, 2L, NA, 2L, NA), HCC_3 = c(NA, 
1L, 1L, NA, 1L)), class = "data.frame", row.names = c("1", "2", 
"3", "4", "5"))

df2 <- structure(list(Name = c("Tom", "Dick", "Harry", "Don", "John"
 ), pizza = c(1L, NA, 3L, NA, 2L), coke = c(NA, 2L, NA, 2L, NA
 ), fries = c(NA, 1L, 1L, NA, 1L)), class = "data.frame", row.names = c("1", 
 "2", "3", "4", "5"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...